我正在尝试编写一个Linq查询,该查询导致父实体的一个字段是其相关子元素的实体的集合。例如,我拥有所有客户实体的集合以及所有订单实体的集合。订单实体有一个名为customerPK的字段,其中包含指向相关父客户实体的链接。我想创建一个连接两个集合的Linq查询,并生成客户实体的所有字段以及一个附加字段,该字段是该特定客户实体的所有相关订单实体的集合对象。
答案 0 :(得分:1)
希望这可以解决问题;
编辑:根据此示例更新代码以执行左外连接; 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
是为了在此时过滤掉空订单,而不是以不包含单个null订单的分组结束订单。
然后是一些示例用法;
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);
}
}
此示例生成一个具有两个字段的对象,即Customer,然后是一组相关的订单,但没有理由不能在您的帖子中指定的查询中选择客户对象的各个字段。