以前は、EFコアの古いバージョンの場合でした。今string.Contains 大文字と小文字が区別され、sqliteの例では、sqlite関数 `instr()'にマップされます(postgresqlについてはわかりません)。
大文字と小文字を区別しない方法で文字列を比較する場合は、DbFunctionsを使用してジョブを実行します。
context.Counties.Where(x => EF.Functions.Like(x.Name, $"%{keyword}%")).ToList();
@Gertへの更新:
質問の仮定の一部が正しくありません。 string.Contains LIKE expressionに変換されません efコアバージョン<=1.0(私は思う)の場合に使用されていたとしても。
- SQLServerの
string.containsCHARINDEX()に変換します 、oracleおよびsqliteでinstr()に dbまたは列の照合が別の方法で定義されていない限り、デフォルトでは大文字と小文字が区別されます(postgresqlについてはわかりません)。 - すべての場合
EF.Functions.Like()SQLLIKEに変換します dbまたは列の照合が特に定義されていない限り、デフォルトでは大文字と小文字を区別しない式。
そうです、それはすべて照合に帰着しますが、上記の方法のどちらを使用するかに応じて、コードが大文字と小文字を区別する/区別しない検索に影響を与える可能性がある方法で、-私が間違っている場合は訂正してください。
さて、私は完全に最新ではないかもしれませんが、EFコアの移行がDB照合を自然に処理するとは思わないので、テーブルを手動で作成していない限り、デフォルトの照合(sqliteとIでは大文字と小文字が区別されます)になります。正直なところ、他の人にはわかりません。
元の質問に戻ると、将来のリリースで3つではない場合でも、大文字と小文字を区別しないこの検索を実行するためのオプションが少なくとも2つあります:
- このトリックを使用してDbContext.OnModelCreating()を使用して、作成時に列の照合を指定します
-
string.Containsを置き換えますEF.Functions.Like()による - または、まだ議論中の有望な機能を待ちます:
EF.Functions.Collate()機能