3

对于每个循环,我都有以下内容来获取所有子对象的总和。有没有更好的方法使用 LINQ?

Purchase p1 = db.Purchases.FirstOrDefault(p => p.PurchaseId == 1);

int total = 0;
foreach (SellingItem item in p1.SellingItems)
{ 
   total = total + Convert.ToInt32(item.Price);
}

在此处输入图像描述

参考:

  1. 如何获得linq中最高价和最低价商品的总和

  2. 使用linq中的ALL运算符过滤EntitySet的子项

4

3 回答 3

11

听起来你只是想要:

// Any reason for FirstOrDefault rather than SingleOrDefault?
var purchase = db.Purchases.FirstOrDefault(p => p.PurchaseId == 1);

if (purchase != null)
{
    var total = purchase.SellingItems
                        .Sum(x => Convert.ToInt32(x.Price));
    ...
}
// TODO: Work out what to do if there aren't any such purchases

为什么你需要价格的转换呢?什么类型是Price,为什么它不是正确的类型?(这真的想要int而不是decimal?)

于 2012-07-27T12:31:48.527 回答
3
p1.SellingItems.Sum(p => p.Price)
于 2012-07-27T12:31:51.007 回答
1

尝试使用 Linq Sum方法:

Purchase p1 = db.Purchases.FirstOrDefault(p => p.PurchaseId == 1);

int total = p1.SellingItems.Sum(item => Convert.ToInt32(item.Price));

它不是更有效,因为它不会更快。但它更简洁。

于 2012-07-27T12:32:07.313 回答