У меня есть следующий класс
public class OrderItem
{
public Guid ID { get; set; }
public Guid? ParentID { get; set; }
public IEnumerable<OrderItem> Children { get; set; }
public OrderItem Parent { get; set; }
}
Сначала я извлекаю их все из базы данных и в массив.
OrderItem[] arrOrderItems = ctx.Database.SqlQuery<OrderItem>(orderItemsQuery).ToArray();
Теперь я хочу связать классы так, чтобы моиБазовый массив все еще содержит ВСЕ элементы, но каждый элемент имеет свои навигационные свойства (Дети, Родитель).
Существуют ли какие-либо функции Linq, обеспечивающие эту функцию?
Моя первоначальная мысль заключалась вGroupJoin, чтобы заполнить детей, а затем присоединиться, чтобы заполнить родителей.У меня есть мой пример кода GroupJoin ниже.Я не мог понять, как заставить groupjoin вернуть родительский объект.Он пытается вернуть IEnumerable >
arrOrderItems = arrOrderItems.GroupJoin(arrOrderItems,
x => x.ID, x => x.ParentID,
(parent, children) =>
parent.Children = children);
Есть мысли?
Редактировать:
Я просто хочу найтилучший (быстрый) способ сделать это
foreach(OrderItem item in arrOrderItems)
{
if (item.ParentID.HasValue)
item.ParentOrderItem = arrOrderItems.Where(x => x.ID == item.ParentID.Value).FirstOrDefault();
item.Children = arrOrderItems.Where(x => x.ParentID.HasValue && x.ParentID.Value == item.ID).ToArray();
}