1

クラスがあります:

public Class MyClass
{
  public string name {get;set;}
  public double quantity {get; set;}
  public double price {get; set;}
  public double value {get; set;}
  public string id1 {get; set;}
  public string id2 {get; set;}
}


List<MyClass> myList = new List<MyClass>();

その後、リスト オブジェクトが読み込まれますが、同じ名前に複数のエントリが含まれる場合があります。たとえば、これが私のリストの概要です。

[0] "stock A", 200.0, 20.0, 4000, "aa", "bb"
[1] "stock A", 400.0, 20.0, 8000, "aa", "bb"
[2] "stock B", 200.0, 20.0, 4000, "cc", "dd"
[3] "stock A", 200.0, 19, 3800, "aa", "bb"
[4] "stock C", 200.0, 20.0, 4000, "ee", "ff"

現在、次のコードがあります。

var groupedStockList = (from t in myList
  group t by new { t.name, t.price }
    into grp
    select new
    {
      grp.Key.name,
      grp.Key.price,

      Quantity = grp.Sum(x => x.quantity)
    }).ToList();

その結果、株式 A はグループ化されていますが、価格の 2 つのセットに対して 2 つのグループであるため、価格 20 の株式 A 600 と価格 19 の株式 200 をグループ化しています。

私は平均価格で行かなければならないと思っていました。つまりsum = (quantity * price) / total_quantity、これをlinqに組み込む方法として迷っています。

これにアプローチして助けてくれる人はいますか?ID 1 と 2 もリストに保持し、名前で並べ替えたいと思います。

ありがとう。

編集

お返ししたいのはこれ、

[0] "stock A", 800, 19.75, 15800, "aa", "bb"
[1] "stock B", 200.0, 20.0, 4000, "cc", "dd"
[2] "stock C", 200.0, 20.0, 4000, "ee", "ff"
4

2 に答える 2

5

これを試して

var groupedStockList = (from t in myList
    group t by new { t.name, t.id1, t.id2 } into grp
    select new
    {
      Name = grp.Key.name,
      TotalQuantity = grp.Sum(x => x.quantity),
      AvgPrice = grp.Sum(x => x.value) / grp.Sum(x => x.quantity),
      TotalValue = grp.Sum(x => x.value),
      Id1 = grp.Key.id1,
      Id2 = grp.Key.id2     
    }).ToList();
于 2013-10-02T16:23:03.090 に答える