Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过在满足条件时添加项目来创建列表_C#_Linq - Fatal编程技术网

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();
    
  • 这是组中的第一个ID

    .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, ....