【发布时间】:2011-12-22 15:31:46
【问题描述】:
我有以下课程
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 来填充孩子,然后再做一个 Join 来填充父母。我在下面有我的示例 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();
}
【问题讨论】:
-
您使用的是实体框架还是 LINQ to SQL?
-
不,有一个自定义 SQL 查询,只是告诉 .sqlquery 用数据填充什么对象。