Linq多重联接和分组依据
本文关键字:Linq | 更新日期: 2024-09-20 01:17:51
所以我甚至不确定我所做的是否可行,但我基本上是尝试取4个不同的列表,将它们连接到一个对象中。
唯一的问题是,orderLineItems
将是一个集合,我不太清楚将其放入适当列表项的最佳方法。我知道我可能需要做一个分组,但当我做选择时,分组似乎打破了分配
需要澄清的一件事是:挑战是获取行项目-如果我不分配行项目并从查询中删除任何行项目引用,数据就会正确填充,但是,由于行项目是一个集合,我无法找出在Select中分配行项目的正确方法-希望这是有意义的。。
var ordersa = (from order1 in orderList
join person in customerAccountPeople
on order1.CustomerAccountPersonId equals person.CustomerAccountPersonId
join subject in subjectList
on order1.SubjectId equals subject.SubjectId
from orderLineItem in orderLineItemList
join order in orderList
on orderLineItem.OrderId equals order.OrderId
group orderLineItem by orderLineItem.OrderId into orderLineItems
select new OrderList()
{
Customer = person,
Subject = subject,
Order = order1,
LineItems = orderLineItems
}).ToList();
在您当前的解决方案中,您基本上是将每个行项目与其订单、主题和人员连接起来,然后按订单id对结果列表进行分组。这不是您想要的:您希望将订单、主题、人员与行项目列表放在一起。
您应该事先对行项目进行分组。既然您澄清了所有内容都在内存中,那么您就可以通过订单id:处理订单行项目的ILookup
// GroupBy works just as well
var orderLineItemsByOrderId = orderLineItemList.ToLookup(ol => ol.OrderId);
var ordersa = (
from order1 in orderList
join person in customerAccountPeople
on order1.CustomerAccountPersonId equals person.CustomerAccountPersonId
join subject in subjectList
on order1.SubjectId equals subject.SubjectId
let orderLineItems = orderLineItemsByOrderId[order1.OrderId]
select new
{
Customer = person,
Subject = subject,
Order = order1,
LineItems = orderLineItems
}).ToList();
var ordersa = (from order1 in orderList
join person in customerAccountPeople
on order1.CustomerAccountPersonId equals person.CustomerAccountPersonId
join subject in subjectList
on order1.SubjectId equals subject.SubjectId
select new OrderList()
{
Customer = person,
Subject = subject,
Order = order1,
LineItems = ( from orderLineItem in orderLineItemList
join order in orderList
on orderLineItem.OrderId equals order1.OrderId
group orderLineItem by orderLineItem.OrderId into orderLineItems )
}).ToList();