1
Мне нужно связать ближайшее действие (если оно есть) с каждым узлом. Запрос SQL пыльник сделать это для меня:Каскадное левое соединение в LINQ
select n.*, o.* from Nodes n
left outer join (
select min(s.ActionAt) as ActionAt, min(s.Ahead) as Ahead, s.NodeId
from SuggestedActions s
group by s.NodeId
) o1
on o1.NodeId=n.Id
left outer join SuggestedActions o
on o.NodeId=o1.NodeId and o.ActionAt=o1.ActionAt and o.Ahead=o1.Ahead
Но я не в состоянии сформулировать тот же запрос с использованием LINQ. Я оставил присоединиться, который выбирает ближайшие действия, и я не знаю, как продолжать присоединение больше данных:
from node in db.Nodes
join no in db.SuggestedActions on node.Id equals no.NodeId into no1
from o1 in no1.DefaultIfEmpty()
group o1 by node.Id into go1
select new {
NodeId = go1.Key,
ActionAt = go1.Min(c => c.ActionAt),
Ahead = go1.Min(c => c.Ahead)
} ...
Спасибо за идею: я не знал, что могу разделить запрос LINQ на несколько IQueryables, а EF выдает одну команду SQL. пф – pf1957