LINQ to Entities で大文字と小文字を区別した比較を実現する
LINQ to Entities クエリ (Thingies.First(t => t.Name == "ThingamaBob")
など) は、既定では大文字と小文字が区別されない場合があります。 これは、LINQ to Entities がラムダ式を SQL に変換するためであり、大文字と小文字の区別は SQL Server データベースの照合設定に依存します。
データベースレベルのソリューション: 照合順序の変更
大文字と小文字を区別した比較を確実に行う最も効率的な方法は、列の照合順序を大文字と小文字を区別するオプションに変更することです。 たとえば、Name
テーブルの Thingies
列で大文字と小文字を区別するには、次の SQL コマンドを使用します。
ALTER TABLE Thingies ALTER COLUMN Name VARCHAR(25) COLLATE Latin1_General_CS_AS
クライアント側のアプローチ: LINQ to Objects の利用
データベースの照合順序を変更できない場合は、LINQ to Objects を使用したクライアント側のソリューションが代替手段を提供します。これには、最初のデータベース クエリとそれに続く AsEnumerable()
を使用したメモリ内比較が含まれます。 例:
Thingies.Where(t => t.Name == "ThingamaBob") .AsEnumerable() .First(t => t.Name == "ThingamaBob");
これにより、最初のデータベース フィルタリングの後に、大文字と小文字を区別したチェックがメモリ内で実行されます。 この方法は、サーバー側の照合順序の変更よりもパフォーマンスが低下する可能性があることに注意してください。
以上がLINQ to Entities で大文字と小文字を区別した比較を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。