Entity Framework と Linq-To-Entities は、本当に頭の痛い問題です。私はかなり単純なクエリを持っています:
var result = feed.FeedItems.Any(ei => ei.ServerId == "12345");
feed は、同じコンテキストからの別のクエリで以前に選択した単一の EF エンティティです。
しかし、生成された SQL は .Any 条件を破棄し、フィード オブジェクトのすべての FeedItems を要求します。これは、ネットワーク帯域幅の浪費となる数千のレコードになる可能性があります。実際のようです.Any比較はC#で行われます:
exec sp_executesql N'SELECT [t0].[Id], [t0].[FeedId], [t0].[ServerId], [t0].[Published], [t0].[Inserted], [t0].[Title], [t0].[Content], [t0].[Author], [t0].[WebUri], [t0].[CommentsUri]
FROM [dbo].[FeedItem] AS [t0]
WHERE [t0].[FeedId] = @p0',N'@p0 int',@p0=3
私も試しました:
!feed.FeedItems.Where(ei => ei.ServerId == "12345").Any();
しかし、それは何も変わりません。Any() を削除して項目の完全なリストをクエリしても、クエリは変わりません。
わかりません...なぜこれが期待どおりに機能しないのですか? があるはずです
WHERE ServerId == 1234
SQL ステートメントの句。
ヘルプ/説明をありがとうございました:)