Entity Frameworkコアの「含む」は、SQLの%like%演算子と同等です。したがって、「次を含む」は大文字と小文字を区別しませんが、大文字と小文字を区別します。(少なくともpostgresでは????)
以下は、キーワードの正しい大文字小文字が使用されている場合にのみ結果を出力します。
context.Counties.Where(x => x.Name.Contains(keyword)).ToList();
何が悪いのですか?
以前のバージョンのEFコアがこれに該当していました。現在string.Contains
は大文字と小文字が区別され、sqliteの例ではsqlite関数 `instr() 'にマッピングされます(postgresqlではわかりません)。
大文字と小文字を区別しない方法で文字列を比較する場合は、ジョブを実行するDbFunctionsがあります。
context.Counties.Where(x => EF.Functions.Like(x.Name, $"%{keyword}%")).ToList();
@Gertへの更新:
質問の仮定の一部が正しくありません。efコアバージョン<= 1.0(そうだと思う)の場合にstring.Contains
使用されていたLIKE expression
としても、変換されません。
string.contains
に変換CHARINDEX()
において、オラクルとのSQLiteにinstr()
DBまたは列照合が他に定義されない限り、デフォルトによって、大文字と小文字が区別されている(ここでも、Iは、PostgreSQLのためわかりません)。EF.Functions.Like()
、LIKE
dbまたは列の照合が別の方法で定義されていない限り、デフォルトでは大文字と小文字を区別しないSQL 式に変換されます。つまり、すべて照合に行き着きますが、コードが大文字と小文字を区別する/区別しない検索に、上記の方法のどれを使用するかに応じて影響を与える可能性があるという点で-私が間違っている場合は修正してください。
今、私は完全に最新ではないかもしれませんが、EFコアの移行はDB照合を自然に処理するとは思わないため、テーブルを手動で作成していない場合は、デフォルトの照合になります(sqliteと正直なところ、他の人にはわからない)。
元の質問に戻ると、将来のリリースで3ではない場合でも、この大文字と小文字を区別しない検索を実行するには、少なくとも2つのオプションがあります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加