【发布时间】:2017-09-25 11:07:31
【问题描述】:
public class Sale
{
public List<LineItem> LineItems { get;set; }
// more stuff
}
public class LineItem
{
public int SellerId { get; set; }
public virtual Sale Sale { get; set; }
// more stuff
}
IEnumerable<LineItem>lineItems = db.GetLineItemsBySellerId(sellerId).ToList();
IOrderedEnumerable<IGrouping<Sale, LineItem>>sales = lineItems.GroupBy(l => l.Sale);
foreach(var s in sales)
{
var lines = s.Key.LineItems.ToList();
DoSomething(lines);
}
我有来自 2 个不同卖家的 3 个订单项的销售。
假设我得到了两个 lineItem,但是当我按销售对它们进行分组时,我得到了整个销售,其中当然包括所有 3 个 lineItem。我不想要这个。我只想将 2 个 lineItem 分组,以便我可以访问销售数据。
这可能吗?
【问题讨论】:
-
如果
GetLineItemsBySellerId仅退回该卖家的商品,GroupBy将不会退回不属于该卖家的商品。所以你在别处有问题 -
但我这样做了,我打破了条款以确认。由于结果的关键是销售,因此当您查看它时,您会看到该销售的所有订单项。
-
你必须显示
GetLineItemsBySellerId,我猜它不会过滤所有List<LineItem>。注意var无助于理解类型,GetLineItemsBySellerId返回什么? -
GetLineItemsBySellerId 返回 2 个结果。它看起来像这样:db.LineItemRepository.Get().Where(l => l.SellerId == SellerId)
-
另外,您用于
GroupBy的Sale是什么属性,它是返回您的自定义类的属性吗?您是否覆盖了Equals和GetHashCode?您遗漏了许多相关信息