C# 通过在满足条件时添加项目来创建列表
我有一份此类设施的清单:C# 通过在满足条件时添加项目来创建列表,c#,linq,C#,Linq,我有一份此类设施的清单: public class Connector { public double Id { get; set; } public string Name { get; set; } public double Len { get; set; } public double Height { get; set; } public double Count { get; set; } } 我需要这样一个结果:(这是满足Len和Heigh
public class Connector
{
public double Id { get; set; }
public string Name { get; set; }
public double Len { get; set; }
public double Height { get; set; }
public double Count { get; set; }
}
我需要这样一个结果:(这是满足Len和Height条件时计数位置的总和。)
是否可以进行任何Linq组合
还是另一个简单的解决方案?以下是我的努力
1 | IZO | 1000 | 200 | 8
2 | IZO | 600 | 200 | 5
3 | IZO | 600 | 180 | 10
请注意索引+1
你可以试试它
在这里,我们按照三个条件对resultList的元素进行分组Name,Len,Height
。然后使用Len,Height,Name,&Id
从该组中创建一个新的连接器对象,然后对该组中的所有元素进行Sum
并使用Sum
分配Count
var
注意:-如果您希望参考@tymtam的答案,这将不会生成递增ID,您在这里尝试的是按
名称
,Len
和高度
对列表进行分组,您可以使用LINQ方法进行分组
然后,您希望使用和Count
属性上的聚合将该组投影到新对象。例如:
var List = from result in resultList
group d by new { d.Name, d.Len , d.Height} into g
select new Connector
(
Id = g.First().ID,
Name = g.Key.Name,
Len = g.Key.Len,
Height = g.Key.Height,
count = g.Sum(s => s.Count)
);
至于ID-well,它在聚合操作中的意义有限。你基本上有两个选择
var result = list
.GroupBy(x => new { x.Name, x.Len, x.Height })
.Select(x => new { x.Key.Name, x.Key.Len, x.Key.Height, Count = x.Sum(y => y.Count) })
.ToList();
.Select( (x,i) => new { ID = i, ....
是的,有可能。对于下一个问题“怎么做?”请对数据进行分组并汇总伟大的答案,但你没有说解释你做了什么或为什么这么做。@tymtam伟大的答案+1对于索引,请解释为什么会创建ID为1,3,5的列表;不是1,2,3:)请看我的答案,得到1,2,3的答案:)@tymtam伟大的答案先生也会根据您的建议修改我的答案
var sums = l.GroupBy(c => new { c.Name, c.Len, c.Height })
.Select((g, index) => new{
Id = index+1,
g.Key.Name,
g.Key.Len,
g.Key.Height,
Count = g.Sum(x => x.Count)
});
var List = from result in resultList
group d by new { d.Name, d.Len , d.Height} into g
select new Connector
(
Id = g.First().ID,
Name = g.Key.Name,
Len = g.Key.Len,
Height = g.Key.Height,
count = g.Sum(s => s.Count)
);
var result = list
.GroupBy(x => new { x.Name, x.Len, x.Height })
.Select(x => new { x.Key.Name, x.Key.Len, x.Key.Height, Count = x.Sum(y => y.Count) })
.ToList();
.Select( (x,i) => new { ID = i, ....
.Select(x => new { ID = x.First().ID, ....