2017-01-03 90 views
1

在我的M-M表中,我有针对特定订单的产品Quantity(int)。LINQ:来自M-M表的总和

我试图计算相同ProductId的数量总和,忽略OrderId。含义我想在我的列表集合中总计特定产品的所有数量。

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

这是我脑子里(代码不会工作):

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

(我添加收藏列表中选择的产品清单产品)

+0

什么是Product_Order? –

+0

@MaksimSimkin它是一个使用'Product.ID'和'Order.ID'(m-m关系)的表。此外,它还有一个'Quantity'属性,它是在订单中添加的同一产品的数量。 – fagol

回答

1

据我了解,您的Quantity是属性Product_Order。所以你需要collection只是为了限制你的产品ID。 我会建议使用此查询:

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

或者如果你有你的Product Entitiy Quantity,并希望使用此一:

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

谢谢。如果没有,它会导致0还是null? – fagol

+0

@fagol它将为0,结果不可为空int。 –

0

您需要构造像这样的Linq

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

我无法访问您提到的数量。我必须以某种方式通过Product_Order:'collection.Where(c => c.ID == product.ID).Select(x => x.Product_Order'.. ?? ..).Sum(); '。不知道该怎么做。 – fagol

+0

@fagol试试我编辑的答案? –

+0

我不能在'Product_Order.ProductId'处添加'ProductId'。它刚刚列出例如计数,添加,删除等。这是我如何制作我的收藏列表:'ICollection collection =(从order到orderFilter从item到order.Product_Order选择item.Product).ToList();'。 – fagol

0

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

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