Хорошо, во-первых, если вы хотите убедиться, что все загружается с нетерпением при выполнении запроса, вы должны добавить явное Include
:
context.
Games.
Include(g => g.Series.Teams.Select(t => t.Players)).
Where(g =>
g.StartTime >= DateTime.Now &&
g.Series.Teams.Any(t => t.Players.Any(p => p.Id == 1))).
ToList();
Однако, как я уже упоминал в своем комментарии, это не даст те же результаты, что и ваш SQL-запрос, так как вы не отфильтруете проигрыватели из дочерней коллекции.
EF 4.1 имеет некоторые изящные Применение фильтров при явной загрузке связанных сущностей функций, но я не смог заставить его работать для вложенных коллекций, поэтому я думаю, что ближе всего вы можете добраться до своего оригинала запрос будет сделан путем проецирования результатов на анонимный объект (или вы можете создать класс для этого, если вам понадобится передать этот объект позже):
var query = context.
Games.
Where(g =>
g.StartTime >= DateTime.Now &&
g.Series.Teams.Any(t => t.Players.Any(p => p.Id == 1))).
Select(g => new
{
Game = g,
Players = g.
Series.
Teams.
SelectMany(t => t.
Players.
Where(p => p.Id == user.Id))
});
Затем вы можете перечислить и проверить результаты:
var gamesAndPlayersList = query.ToList();