【发布时间】:2012-02-02 14:20:10
【问题描述】:
我正在尝试编写一个 Linq 查询,该查询会产生一个父实体,其中一个字段是其相关子实体的集合。例如,我有一个所有客户实体的集合和一个所有订单实体的集合。订单实体有一个名为 customerPK 的字段,其中包含到相关父客户实体的链接。我想创建一个 Linq 查询,它连接两个集合并生成客户实体的所有字段以及一个附加字段,该字段是该特定客户实体的所有相关订单实体的集合对象。
【问题讨论】:
标签: linq
我正在尝试编写一个 Linq 查询,该查询会产生一个父实体,其中一个字段是其相关子实体的集合。例如,我有一个所有客户实体的集合和一个所有订单实体的集合。订单实体有一个名为 customerPK 的字段,其中包含到相关父客户实体的链接。我想创建一个 Linq 查询,它连接两个集合并生成客户实体的所有字段以及一个附加字段,该字段是该特定客户实体的所有相关订单实体的集合对象。
【问题讨论】:
标签: linq
希望这能解决问题;
编辑:更新代码以执行左外连接,基于此示例; http://smehrozalam.wordpress.com/2009/06/10/c-left-outer-joins-with-linq/。这现在包括没有订单的客户。
var query = from c in customers
join o in orders on c.ID equals o.CustomerPK into joined
from j in joined.DefaultIfEmpty()
group j by c into g
select new { Customer = g.Key, Orders = g.Where(x => x != null) };
注意,在选择 Orders 分组时使用Where 是为了在此时过滤掉空订单,而不是最终为没有订单的客户提供包含单个空订单的分组.
然后是一些示例用法;
foreach (var result in query)
{
Console.WriteLine("{0} (ID={1})", result.Customer.Name, result.Customer.ID);
foreach (var order in result.Orders)
{
Console.WriteLine(order.Description);
}
}
此示例生成一个具有两个字段的对象,即客户和一组相关的订单,但没有理由不能按照您在帖子中指定的那样在查询中选择客户对象的各个字段。
【讨论】: