Entity Framework и Linq-To-Entities действительно дают мне некоторые головные боли. У меня довольно простой запрос:Entity Framework. Любой не генерирует ожидаемое предложение SQL WHERE
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.
Большое спасибо за любую помощь/разъяснения :)
Что такое 'feed.FeedItems'? –
Как упоминалось выше, подача запрашивается из DbContext перед таким feed.FeedItems является EntitySet –