0

コレクションの例:

List<Product> list = new List<Product>();
list.Add(new Product { Id = 1, Good = 50, Total = 50 });
list.Add(new Product { Id = 2, Good = 18, Total = 30 });
list.Add(new Product { Id = 2, Good = 15, Total = 30 });
list.Add(new Product { Id = 1, Good = 40, Total = 50 });
list.Add(new Product { Id = 3, Good = 6, Total = 10 });
list.Add(new Product { Id = 1, Good = 45, Total = 50 });
list.Add(new Product { Id = 3, Good = 8, Total = 10 });

製品の数は不明です。結果として必要なのは、それぞれの個別の製品の商品/合計のパーセンテージを取得し、次にすべての製品の平均を取得することです。この場合:

Product Id=1, GoodSum = 50 + 40 + 45 = 135, TotalSum = 50 + 50 + 50 = 150, Perc = 135/150
Product Id=2, GoodSum = 18 + 15 = 33, TotalSum = 30 + 30 = 60, Perc = 33/60
Product Id=3, GoodSum = 6 + 8 = 14, TotalSum = 10 + 10 = 20, Perc = 14/20

Avg = Avg(135/150 + 35/60 + 14/20) = Avg(0.9 + 0.55 + 0.7) = 2.15 / 3 = 7.17

Linqでこれを行うことはできますか?私はLinqソリューションにのみ興味があります。

4

2 に答える 2

2

これを試して :

var avg = list.GroupBy(G => G.Id)
              .Select(G => (G.Sum(T => T.Good)/G.Sum(T => T.TotalSum)))
              .Average();
于 2013-02-22T17:22:42.723 に答える
2

このようなもの?

var groups = list.GroupBy(l => l.Id)
                 .Select(g => new {
                                      Id = g.Key, 
                                      GoodSum = g.Sum(i=>i.Good), 
                                      TotalSum= g.Sum(i=>i.Total),
                                      Perc = (double) g.Sum(i=>i.Good) / g.Sum(i=>i.Total)
                                  }
                        );

 var average = groups.Average(g=>g.Perc);

に対するあなたの答えはであってAvgはなら0.717ないことに注意してください7.17

于 2013-02-22T17:20:37.877 に答える