LINQ to Entities での大文字と小文字を区別しない比較
LINQ to Objects とは異なり、LINQ to Entities は大文字と小文字を区別する比較を直接サポートしません。これは、LINQ to Entities がラムダ式を SQL ステートメントに変換し、最終的にデータベース (SQL Server など) によって実行されるためです。デフォルトでは、SQL Server は大文字と小文字を区別しない照合順序を使用します。つまり、次のクエリは大文字と小文字に関係なく常に一致を返します:
<code>context.Thingies.First(t => t.Name == "ThingamaBob");</code>
サーバー側ソリューション
LINQ to Entities で大文字と小文字を区別する比較を実装するには、関連する列のデータベース照合順序を変更する必要があります。たとえば、次の SQL ステートメントは、「Thingies」テーブルの「Name」列の照合順序を大文字と小文字が区別されるように変更します。
<code>ALTER TABLE Thingies ALTER COLUMN Name VARCHAR(25) COLLATE Latin1_General_CS_AS;</code>
クライアント ソリューション
理想的ではありませんが、LINQ to Entities と LINQ to Objects の両方を活用するクライアント側の回避策があります。
<code>var result = context.Thingies.Where(t => t.Name == "ThingamaBob") .AsEnumerable() .First(t => t.Name == "ThingamaBob");</code>このアプローチでは、
がクエリをメモリ内の列挙に変換し、AsEnumerable()
を使用して大文字と小文字を区別する二次比較を実行できるようにします。ただし、この回避策ではデータベースに追加のクエリが発生します。 Where()
以上がLINQ to Entities で大文字と小文字を区別した比較を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。