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

LinqSumメソッドを使用してみてください。

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 に答える