LINQからコンパイル済みSQLクエリを取得しようとしています。query
がデータベースの3つの列のサブ文字列(大文字と小文字を区別しない)であるかどうかを確認します。LINQ式がSQLに変換されていない
私は次のように私が思い付く
クエリがある.NETのコア1.1を使用しています:
users.Select(u => new
{
User = u,
query = u.FirstName.ToLower() + u.LastName.ToLower() + u.Email.ToLower()
}).Where(x => x.query.Contains(query))
しかし、デバッグ情報を見たとき、私はこの警告になっています:
LINQ式 '(([u] .FirstName.ToLower()+ [u] .LastName.ToLower())+ [u] .Email.ToLower())。Contains(__ query_0)'を翻訳できませんでしたローカルで評価されます。私が試した
2番目のクエリ:それはまったく同じ警告を私に与え
users.Where(x => u.FirstName.ToLower().Contains(query) || u.LastName.ToLower().Contains(query) || u.Email.ToLower().Contains(query))
けど。
なぜそうですか? 私のようなものを探しています:私は1つの以上の実験でした
SELECT * FROM USERS WHERE FirstName LIKE query OR LastName LIKE query OR Email LIKE query
UPDATE
:
users.Where(u =>
u.FirstName.Contains(query) ||
u.LastName.Contains(query) ||
u.Email.Contains(query));
をこれも
LINQの式 'になりました(([u] .FirstName.Contains(__ query_0)OrElse [u] .LastName.Conta (__ query_2)) 'は翻訳できませんでした。 がローカルで評価されます。
データベースの照合順序が 'xxx_CI'の場合、' .ToLower() 'は必要ありません。 'SELECT CONVERT(varchar、SERVERPROPERTY( 'collation'));'を確認します。 – Magnus
チップのおかげで、私は 'SQL_Latin1_General_CP1_CI_AS'を持っています。私の質問がSQLにコンパイルされていない場合、大文字と小文字が区別されます。 – MaLiN2223
「コンパイルされていない」とはどういう意味ですか? Linq2Objectsに対して同じクエリを実行すると、異なる動作をします。 (大文字と小文字が区別されます) – Magnus