新列表的总和列表

时间:2013-06-11 16:06:40

标签: c# linq math

我有一个项目列表,每个项目的总价值。 有些是在不同的层......如下所示

**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)

1 个答案:

答案 0 :(得分: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))
                });