我为每个循环都有以下内容来获取所有子对象的总和。使用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);
}
参考:
答案 0 :(得分: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
吗?)
答案 1 :(得分:1)
尝试使用Linq Sum方法:
Purchase p1 = db.Purchases.FirstOrDefault(p => p.PurchaseId == 1);
int total = p1.SellingItems.Sum(item => Convert.ToInt32(item.Price));
效率不高,因为它不会更快。但它更简洁。