1

各アイテムの合計値を持つアイテムのリストがあります.いくつかは別のレイヤーにあります..以下に示すように

**Name, Layer, Value**
Item 1, Layer1, 100
Item 1, Layer1, 200
Item 1, Layer2, 700

これらを新しいリストに結合し、それらをマージしたいと思います..以下に示すように

**Name, List(Layer1Value, Layer2Value)**
Item 1, (300,700)

これは私がこれまでに持っているコードです..

List<double> = 
Enumerable.Range(0, t.Select(u => u.LayerName).Distinct().Count())
.Select(idx => t.Select(a => a.sum).Sum()).ToList()

これはもちろん間違っており、合計をすべての値スポットに入れます..このように

Item 1, (1000,1000)

それを正しく動作させる方法がわからない場合、どんな助けでも素晴らしいでしょう..ありがとう


追加されたヘルプ..このようなリストから始めます

private class Items
{
    public string Name;
    public string Layer;
    public double Value;
}

List<Items> MyItems = new List<Items>();

こんな一覧に

private class CombinedItems
{
    public string Name;
    public List<double> LayerValues;
}

List<CombinedItems> MyCombinedItems = new List<CombinedItems>();

特定の順序で出力する必要があります..例、4つのレイヤーがある場合..Layer1、Layer2、Layer3、Layer4..

item1 には Layer1 と Layer 4 の値があります。

リストは (Layer1Value, 0, 0, Layer4Value) である必要があります

4

1 に答える 1

4
list.GroupBy(x => x.Name)
    .Select(g => new {
          Name = g.Key,
          Elements = g.GroupBy(x => x.Layer)
                      .Select(g => g.Sum(z => z.Value))
       });

編集 :

var layers = list.Select(x => x.Layer).Distinct().OrderBy(x => x);
var result = list.GroupBy(x => x.Name)
                .Select(g => new
                {
                    Name = g.Key,
                    Values = layers.Select(x =>  g.Where(n => n.Layer == x)
                                                  .Sum(z => z.Value))
                });
于 2013-06-11T16:18:42.103 に答える