1
バグのトラブルシューティング中にこの問題が発生しました。これは遅延実行によるもので、クエリはvariableキーワードの最後の値を使用しています。これを解決するための推奨パターンは何ですか?このようなクエリでforeach/forのwhere句を組み込んだ遅延クエリ
var query = from c in dbContext.Cars
select c;
var keywords = new string[] { "Clean", "Car" };
foreach (var keyword in keywords)
{
query = query.Where(c => c.Name.Contains(keyword));
}
var cars = query.ToList();
結果(両方のパラメータの値が「車」であることに注意)
exec sp_executesql N'SELECT
[Extent1].[CarID] AS [MID],
[Extent1].[Name] AS [Name],
FROM [dbo].[Cars] AS [Extent1]
WHERE ([Extent1].[Name] LIKE @p__linq__0 ESCAPE N''~'') AND ([Extent1].[Name] LIKE @p__linq__1 ESCAPE N''~'')
',N'@p__linq__0 nvarchar(4000),@p__linq__1 nvarchar(4000)',@p__linq__0=N'%Car%',@p__linq__1=N'%Car%'
LINQPadでのデバッグも同じクエリ
DECLARE p__linq__0 NVarChar(1) = '%Car%'
DECLARE p__linq__1 NVarChar(1) = '%Car%'
SELECT
[Extent1].[CarID] AS [MID],
[Extent1].[Name] AS [Name],
FROM [dbo].[Cars] AS [Extent1]
WHERE ([Extent1].[Name] LIKE @p__linq__0 ESCAPE N'~') AND ([Extent1].[Name] LIKE @p__linq__1 ESCAPE N'~')
ありがとうございました@ジョン、それは正常に動作します。エリックのブログリンクもありがとうございました。これは、かなり大きなコードで実際のクエリ構築の非常に短いバージョンですので、Any/Allを使用できるかどうかを確認する必要があります。あまりにもありがとう。 –
他の結合や条件が存在する実際のクエリで使用されたとき、孤立したクエリ(私が投稿したもの)内のすべてが動作する間、EF生成クエリは厄介になり、永遠に実行されます。それは変化が始まり大きなものになる理由かもしれません。内側に新しいクロージャ変数を作成してforeachに固執する。 –