我有一个项目列表,每个项目的总价值。 有些是在不同的层......如下所示
**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)
答案 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))
});