Я смотрел на этот ответ и задавался вопросом, может ли теперь быть более лаконичный способ объединения двух сторон GroupJoin, то есть присоединения коллекции Children
правой стороны непосредственно к Parent
.
Автор предлагает,
var parentChildrenQry =
parents.GroupJoin(children, parent.Id, child.ParentId, new { (parent, childGrp) => new { Parent = parent, Children = childGrp.ToList() } );
foreach(var grp in parentChildrenQry) {
grp.Parent.Children = grp.Children;
}
Но не можем ли мы исключить этот foreach
шаг выше и просто объединить их в resultSelector?
Полагаю, можно также заново создать новые объекты в resultSelector, т.е.
var myCompleteObjects =
parents.GroupJoin(children, parent.Id, child.ParentId,
(parent, childGrp) => new CompleteObject
{ Id = parent.Id,
Name = parent.Name,
Children = childGrp.ToList()
}).ToList();
Но это может быть довольно долго для больших объектов. Я думал, что Select
или SelectMany
могли бы помочь, но я не могу найти пример того, как они достигли этого.