【问题标题】:LINQ: Sum from M-M tableLINQ:来自 M-M 表的总和
【发布时间】:2017-01-03 22:08:14
【问题描述】:

在我的 M-M 表中,我有一个特定订单的 Quantity(int) 产品。

我正在尝试计算相同 ProductId 的总数量,忽略 OrderId。这意味着我想汇总我的列表集合中特定产品的所有数量。

Product_Order:
    ---------------- ----------- ---------
    |   ProductId   | OrderId   | Quantity |
    ---------------- ----------- ---------

这就是我的想法(代码不起作用):

SumQuantity = collection.Sum(x=> x.Product_Order
                         .Where(c=>c.ProductId == product.ID)
                         .Select(Quantity))

(collection-list是我添加的产品列表)

【问题讨论】:

  • 什么是 Product_Order ?
  • @MaksimSimkin 这是一个使用Product.IDOrder.ID(m-m 关系)的表。此外,它还有一个Quantity 属性,它是订单中添加的相同产品的数量。

标签: c# linq


【解决方案1】:

据我了解,您的QuantityProduct_Order 的属性。所以你需要collection 来限制你的产品ID。 我建议使用这个查询:

var SumQuantity = Product_Order.Where(x=>collection.Any(o=>o.ProductId==x.ProductId))
                       .Sum(x=>x.Quantity);

或者,如果您的 Product 实体上有 Quantity 并且想要使用这个:

var SumQuantity = collection.Where(x=>Product_Order.Any(o=>o.ProductId==x.ProductId))
                   .Sum(x=>x.Quantity);

【讨论】:

  • 谢谢。如果没有,结果是 0 还是 null?
  • @fagol 它将为 0,结果不可为空。
【解决方案2】:

你需要像这样构造 Linq

collection.Where(c => c.Product_Order.ProductId == product.ID).Select(x => x.Product_Order.Quantity).Sum();

【讨论】:

  • 我无法访问您提到的 Quantity。我必须以某种方式通过Product_Ordercollection.Where(c => c.ID == product.ID).Select(x => x.Product_Order..??..).Sum();。不知道该怎么做。
  • 我无法在Product_Order.ProductId 添加ProductId。它只是列出了例如计数、添加、删除等。这就是我制作收藏列表的方式:ICollection<Product> collection = (from order in orderFilter from item in order.Product_Order select item.Product).ToList();
【解决方案3】:

如果 Product_Order.Product 是一个列表,那么你可以试试这个

collection.Where(c => c.Product_Order.Product.Any(p=>p.id == product.ID)).Select(x => x.Product_Order.Quantity).Sum();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    相关资源
    最近更新 更多