Запрос на основе метода:
Чтобы реализовать это в лямбде, нам нужно использовать Queryable.GroupJoin :
var query = context.ProcessNames
.GroupJoin(context.Usages
.Where(u => u.Datetime >= new DateTime(2010, 1, 8) )
&& u.Datetime <= new DateTime(2010, 10, 11),
pn => pn.Id,
u => u.ProcessNameId,
(pn, usages) => new { Name = pn.Name,
Sum = usages.Sum(u => u.Amount) });
Выражение запроса:
И тот же запрос в синтаксисе выражения запроса:
var query =
from pn in context.ProcessNames
join u in context.Usages
.Where(u => u.Datetime >= new DateTime(2010, 1, 8) )
&& u.Datetime <= new DateTime(2010, 10, 11),
on pn.Id
equals u.ProcessNameId
into g
select new { Name = pn.Name,
Sum = g.Sum(u => u.Amount) };
Проверка сгенерированного SQL:
Чтобы убедиться, что эти запросы дают вам желаемую команду Sql во время выполнения, вы можете сделать это:
string sqlCommand = ((ObjectQuery)query).ToTraceString();
Дополнительные примеры:
Несколько хороших примеров для GroupJoinобратите внимание на следующие элементы:
Примеры синтаксиса запросов на основе методов: операторы соединения
Примеры синтаксиса выражений запроса: операторы соединения