Перекрестные соединения, как правило, представлены в виде нескольких из положений в выражении запроса или вызова SelectMany в синтаксисе метода расширения.
Так первая часть запроса может быть:
var query = from systemName in db.Table.Select(x => x.SystemName).Distinct()
from resetCode in db.Table.Select(x => x.ResetCode).Distinct()
...
левый внешние соединения обычно представлены с запросом «присоединиться к ... в ...», возможно, как это:
var query = from systemName in db.Table.Select(x => x.SystemName).Distinct()
from resetCode in db.Table.Select(x => x.ResetCode).Distinct()
join tmp in db.Table on
new { ResetCode = resetCode, SystemName = systemName }
equals new { tmp.ResetCode, tmp.SystemName }
into tmpGroup
select new { ResetCode = resetCode,
SystemName = systemName,
Count = tmpGroup.Count() };
Я не уверен в части графа, если честно ... Я не уверен на 100%, что делает COUNT(v.ResetCode)
в вашем исходном SQL.
спасибо. Это решило мою проблему. Я добавил имя столбца в count(), чтобы иметь 0 для отсутствия кодов сброса. запрос linq корректно отображает результаты. Но будет ли кто-нибудь из группы иметь удар? просто любопытно узнать, какую роль он играет на самом деле. – Sasi
@Sasi: Вы эффективно выполняете операцию «group by» с эффективностью «join ... in». Он использует оператор запроса GroupJoin LINQ. –