[解決済み] エンティティフレームワーク EF.Functions.Likeとstring.Containsの比較
質問
エンティティフレームワークコア2.0の発表を読みました。 https://blogs.msdn.microsoft.com/dotnet/2017/08/14/announcing-entity-framework-core-2-0/
のような新しい Sql 関数が追加されたと書かれています。
EF.Functions.Like
のようにSQLを実行するための
LIKE
操作を実行します。
私は不思議に思ったのですが、それなら
EF.Functions.Like
と
string.Contains
/
StartsWith
?
例えば
var customers = context.Customers.Where(c => c.Name.StartsWith("a")); // Version A
var customers = context.Customers.Where(c => EF.Functions.Like(c.Name, "a%")); // Version B
2つのバージョンの違いは何でしょうか?
EFはすでに翻訳する方法を知っています
string.Contains
/
StartsWith
を対応するSQL操作に変換していますね。
私が思いつく唯一の理由は、EF.Functions.Likeが以下のようなもっと複雑なパターンを可能にするからです。
"a%b%"
(のような複雑なパターンが可能になるからです(ただし、これは
StartsWith("a") && Contains("b")
)
これが理由でしょうか?
どのように解決するのですか?
クエリのように ワイルドカード文字 をサポートしており、いくつかのシナリオでは文字列拡張メソッドと比較して非常に便利です。
例えば、'ri' を中間文字とする 4 文字の名前をすべて検索する場合、次のようになります。
EF.Functions.Like(c.Name, "_ri_");
または、母音で始まる都市からすべての顧客を取得するために、次のようにします。
var customers = from c in context.Customers
where EF.Functions.Like(c.City, "[aeiou]%")
select c;
(SQLクエリへの変換がどのように異なるかについては@Tsengの回答を読んでください)
関連
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み] 不変量名 'System.Data.SqlClient' を持つ ADO.NET プロバイダに対応する Entity Framework プロバイダが見つかりませんでした。
-
[解決済み] Entity Framework 5 レコードを更新する
-
[解決済み] Entity FrameworkとLINQ to SQLの比較
-
[解決済み] Entity Frameworkにおける最速の挿入方法
-
[解決済み] Entity Frameworkで生成されたSQLを表示するにはどうすればよいですか?
-
[解決済み] Entity Framework - 複数レベルのプロパティを含める
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み] 関数を終了するには?