【问题标题】:Linq Group By Key seems to be "expanding" my result setLinq Group By Key 似乎正在“扩展”我的结果集
【发布时间】: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&lt;LineItem&gt;。注意var 无助于理解类型,GetLineItemsBySellerId 返回什么?
  • GetLineItemsBySellerId 返回 2 个结果。它看起来像这样:db.LineItemRepository.Get().Where(l => l.SellerId == SellerId)
  • 另外,您用于GroupBySale 是什么属性,它是返回您的自定义类的属性吗?您是否覆盖了EqualsGetHashCode?您遗漏了许多相关信息

标签: c# linq group-by


【解决方案1】:

我猜你有

foreach(var g in sales)
{
  var sale = g.Key;
  DoSomething(sale.lineItems);
}

您需要改为:

foreach(var g in sales)
{
  var sale = g.Key;
  var lines = g.ToList();
  DoSomething(lines);
}

【讨论】:

  • 你成功了。而不是 g.ToList() 我使用的是 g.Key.LineItems.ToList()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多