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# LINQ group by list和每个分组属性的第一个/最后一个_C#_Linq_Group By - Fatal编程技术网

C# LINQ group by list和每个分组属性的第一个/最后一个

C# LINQ group by list和每个分组属性的第一个/最后一个,c#,linq,group-by,C#,Linq,Group By,我不知道如何使用LINQ进行此查询。 我有以下示例类: class Foo { string Identifier {get; set;} int StartValue {get; set;} int EndValue {get; set;} } 其中,Identifier是唯一标识符,StartValue和EndValue是两个整数 我创建了以下列表 List<Foo> myList = new List<Foo>() myList.Add(n

我不知道如何使用LINQ进行此查询。 我有以下示例类:

class Foo
{
    string Identifier {get; set;}
    int StartValue {get; set;}
    int EndValue {get; set;}
}
其中,
Identifier
是唯一标识符,
StartValue
EndValue
是两个整数

我创建了以下列表

List<Foo> myList = new List<Foo>()
myList.Add(new Foo { "11111", 1, 2 })
myList.Add(new Foo { "11111", 2, 3 })
myList.Add(new Foo { "11111", 3, 4 })
myList.Add(new Foo { "22222", 1, 2 })
我想按标识符对每个元素进行分组,并将第一个
起始值
和最后一个
结束值
关联到它们

例如,我有三个“11111”元素,因此在我的输出列表中,我希望有一个“11111”元素,其中
StartValue
是三个StartValue(1)中的第一个,而
EndValue
是三个EndValue(4)中的最后一个

结果表

"11111" 1 4
"22222" 1 2
我应该如何做到这一点?

给你

IEnumerable<Foo> result = myList.GroupBy(x => x.Identifier)
                                .Select(x => new Foo() {
                                    Identifier = x.Key, 
                                    StartValue = x.First().StartValue, 
                                    EndValue = x.Last().EndValue
                                });
IEnumerable结果=myList.GroupBy(x=>x.Identifier)
.Select(x=>newfoo(){
标识符=x.Key,
StartValue=x.First().StartValue,
EndValue=x.Last().EndValue
});
给你

IEnumerable<Foo> result = myList.GroupBy(x => x.Identifier)
                                .Select(x => new Foo() {
                                    Identifier = x.Key, 
                                    StartValue = x.First().StartValue, 
                                    EndValue = x.Last().EndValue
                                });
IEnumerable结果=myList.GroupBy(x=>x.Identifier)
.Select(x=>newfoo(){
标识符=x.Key,
StartValue=x.First().StartValue,
EndValue=x.Last().EndValue
});

按标识符分组,然后选择第一个起始值和最后一个结束值-与您描述的非常接近

var result = myList.GroupBy(x => x.Identifier)
      .Select(x => new { 
               Identifier = x.Key, 
               FirstStart = x.First().StartValue, 
               LastEnd = x.Last().EndValue });
如果您更喜欢投影回原始对象而不是匿名对象,那么也可以投影回原始对象

请注意,您的问题并不完全清楚您想要的是第一个/最后一个还是最小/最大值。如果您想要最小-最大值,它几乎与上面相同

var result = myList.GroupBy(x => x.Identifier)
      .Select(x => new { 
               Identifier = x.Key, 
               MinStart = x.Min(y => y.StartValue), 
               MinEnd = x.Max(y => y.EndValue) });

同样,您可以将其投影回您的类,而不是匿名的。

按标识符分组,然后选择第一个起始值和最后一个结束值-几乎与您描述的一样

var result = myList.GroupBy(x => x.Identifier)
      .Select(x => new { 
               Identifier = x.Key, 
               FirstStart = x.First().StartValue, 
               LastEnd = x.Last().EndValue });
如果您更喜欢投影回原始对象而不是匿名对象,那么也可以投影回原始对象

请注意,您的问题并不完全清楚您想要的是第一个/最后一个还是最小/最大值。如果您想要最小-最大值,它几乎与上面相同

var result = myList.GroupBy(x => x.Identifier)
      .Select(x => new { 
               Identifier = x.Key, 
               MinStart = x.Min(y => y.StartValue), 
               MinEnd = x.Max(y => y.EndValue) });

再说一次,你可以把它投影回你的班级,而不是匿名的。

对不起,我错了。我第一次要求最小值/最大值,但我希望在编辑时使用first/last。非常感谢第一个/最后一个和最大/最小解决方案,它们工作得非常好。对不起,我错了。我第一次要求最小值/最大值,但我希望在编辑时使用first/last。非常感谢first/last和max/min解决方案,它们工作得非常完美