0

linq ステートメントの作成に少し問題がありました (C#、クエリ構文ですが、メソッド構文を処理できました)。グループ化と、計算されたプロパティの公開をサポートする必要があります。私はそれぞれを個別に処理していますが、それらを一緒に機能させることはできません。どんな助けでも大歓迎です。

データ

GrpField          Qty      Price
-------------     ---      -----
RED                1        10
RED                2        10
RED                1        50
BLUE               2        30
BLUE               2        50

出力は、各グループの合計価格 (数量 * 価格) の合計である必要があります

望ましい結果

RED    80
BLUE  160

これにより、合計価格ラインが表示されます

from x in origdata
let linetotal = x.qty * x.price
select new { x.grpfield, x.qty, x.price, linetotal } 

しかし、匿名型で合計のような集計を実行できないため、新しい匿名型でグループ化することはできません。グループを最初に実行すると、総計の前に linetotal をミックスに組み込む方法がわかりません。

4

3 に答える 3

4

匿名型ステートメントで合計のような集計を実行できないため、あなたに対する証拠として...

var data = new[]
    {
        new {GrpField = "RED", Qty = 1, Price = 10},
        new {GrpField = "RED", Qty = 2, Price = 10},
        new {GrpField = "RED", Qty = 1, Price = 50},
        new {GrpField = "BLUE", Qty = 2, Price = 30},
        new {GrpField = "BLUE", Qty = 2, Price = 50},
    };

var grouped =
    from d in data
    group d by d.GrpField
    into g
    select new {Group = g.Key, Sum = g.Sum(x => x.Qty * x.Price)};

foreach(var g in grouped)
    Console.WriteLine("{0} - {1}", g.Group, g.Sum);
于 2012-10-05T15:16:56.997 に答える
2

最初にグループ化してから、操作を合計します。

origdata.GroupBy(m => m.GrpField)
 .Select(group => new {
     GrpField = group.Key,
     CalculatedValue = group.Sum(m => m.qty * m.price)
  });
于 2012-10-05T15:10:23.273 に答える
1
origdata.GroupBy(p=>p.GrpField)
.Select(p=> new()
{
    GrpField=p=>p.Key,
    Sum=p.Sum(q=>q.Qty*q.Price)
})
于 2012-10-05T15:12:33.440 に答える