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 层.. 层 1、层 2、层 3、层 4 ..

并且 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 回答