Entity Framework 和 Linq-To-Entities 真的让我有些头疼。我有一个相当简单的查询:
var result = feed.FeedItems.Any(ei => ei.ServerId == "12345");
feed 是我之前在来自同一上下文的单独查询中选择的单个 EF 实体。
但是生成的 SQL 只是丢弃了 .Any 条件,并请求提要对象的所有 FeedItems,这可能是数千条记录,这是对网络带宽的浪费。似乎是实际的。任何比较都是在 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 语句中的子句。
非常感谢任何帮助/澄清:)