sql >> データベース >  >> RDS >> PostgreSQL

Entity Frameworkコア-大文字と小文字が区別されますか、それとも大文字と小文字が区別されませんか?

    以前は、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.contains CHARINDEX()に変換します 、oracleおよびsqliteでinstr()に dbまたは列の照合が別の方法で定義されていない限り、デフォルトでは大文字と小文字が区別されます(postgresqlについてはわかりません)。
    • すべての場合EF.Functions.Like() SQL LIKEに変換します dbまたは列の照合が特に定義されていない限り、デフォルトでは大文字と小文字を区別しない式。

    そうです、それはすべて照合に帰着しますが、上記の方法のどちらを使用するかに応じて、コードが大文字と小文字を区別する/区別しない検索に影響を与える可能性がある方法で、-私が間違っている場合は訂正してください。

    さて、私は完全に最新ではないかもしれませんが、EFコアの移行がDB照合を自然に処理するとは思わないので、テーブルを手動で作成していない限り、デフォルトの照合(sqliteとIでは大文字と小文字が区別されます)になります。正直なところ、他の人にはわかりません。

    元の質問に戻ると、将来のリリースで3つではない場合でも、大文字と小文字を区別しないこの検索を実行するためのオプションが少なくとも2つあります:

    1. このトリックを使用してDbContext.OnModelCreating()を使用して、作成時に列の照合を指定します
    2. string.Containsを置き換えます EF.Functions.Like()による
    3. または、まだ議論中の有望な機能を待ちます:EF.Functions.Collate() 機能


    1. 赤方偏移で現在の合計を計算する方法

    2. HDFSの概要| HDFSとは何ですか?どのように機能しますか?

    3. SpringJPAでpostgres配列をマッピング中にエラーが発生しました

    4. SQLite SUBSTRING()の説明