エンティティへの LINQ: 大文字と小文字を区別した比較の実現
LINQ to Entities クエリは、多くの場合、SQL Server の大文字と小文字を区別しない性質を継承します。このガイドでは、LINQ to Entities クエリ内で大文字と小文字を区別した比較を強制する方法について説明します。
大文字と小文字を区別しない動作を理解する
LINQ to Entities はクエリを SQL に変換します。 SQL Server のデフォルトの照合順序では大文字と小文字が区別されません。つまり、「Name == 'ThingamaBob'」は大文字と小文字を区別しない一致として扱われます。
データベースレベル (サーバー側) ソリューション
最も効率的なアプローチは、データベース列の照合順序を変更して大文字と小文字が区別されるようにすることです。 次のような SQL ステートメントを使用します:
<code class="language-sql">ALTER TABLE Thingies ALTER COLUMN Name VARCHAR(25) COLLATE Latin1_General_CS_AS</code>
この変更により、SQL クエリと LINQ to Entities クエリの両方で大文字と小文字を区別した比較が行われるようになります。
アプリケーションレベル (クライアント側) の回避策
データベースの変更が現実的でない場合は、パフォーマンスは低下しますが、クライアント側のソリューションを実装できます。
<code class="language-csharp">Thingies.Where(t => t.Name == "ThingamaBob") .AsEnumerable() .First(t => t.Name == "ThingamaBob");</code>
このアプローチでは、メモリ内で大文字と小文字を区別した比較を実行して、データをクライアントに取得します。
重要な考慮事項
ObjectQuery.ToTraceString()
を使用して、生成された SQL を調べ、使用されている照合順序を確認します。以上がLINQ to Entities で大文字と小文字を区別した比較を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。