C# LINQ group by list和每个分组属性的第一个/最后一个
我不知道如何使用LINQ进行此查询。 我有以下示例类: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
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解决方案,它们工作得非常完美