クラスがあります:
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"