如何获得每个组使用Linq的第一个logging
考虑到以下logging:
Id F1 F2 F3 ------------------------------------------------- 1 Nima 1990 10 2 Nima 1990 11 3 Nima 2000 12 4 John 2001 1 5 John 2002 2 6 Sara 2010 4
我想根据F1
字段进行分组并按照Id
sorting,并从类似这些logging的组的第一个logging中获取所有字段:
Id F1 F2 F3 ------------------------------------------------- 1 Nima 1990 10 4 John 2001 1 6 Sara 2010 4
我如何使用linq做到这一点?
var res = from element in list group element by element.F1 into groups select groups.OrderBy(p => p.F2).First();
var result = input.GroupBy(x=>x.F1,(key,g)=>g.OrderBy(e=>e.F2).First());
@Alireza的awnser是完全正确的,但是你必须注意,当使用这个代码
var res = from element in list group element by element.F1 into groups select groups.OrderBy(p => p.F2).First();
这是类似于这个代码,因为你sorting列表,然后做分组,所以你得到的第一行组
var res = (from element in list) .OrderBy(x => x.F2) .GroupBy(x => x.F1) .Select()
现在,如果你想做更复杂的事情,比如采取相同的分组结果,但采取F2的第一个元素和F3的最后一个元素或更多的自定义,你可以通过研究代码
var res = (from element in list) .GroupBy(x => x.F1) .Select(y => new { F1 = y.FirstOrDefault().F1; F2 = y.First().F2; F3 = y.Last().F3; });
所以你会得到类似的东西
F1 F2 F3 ----------------------------------- Nima 1990 12 John 2001 2 Sara 2010 4
用它来实现你想要的。 然后决定你想要返回的属性。
yourList.OrderBy(l => l.Id).GroupBy(l => new { GroupName = l.F1}).Select(r => r.Key.GroupName)