Как получить первую запись в каждой группе с помощью Linq
учитывая следующие записи:
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
и получить все поля из первой записи группы, подобные этим записям:
Id F1 F2 F3
-------------------------------------------------
1 Nima 1990 10
4 John 2001 1
6 Sara 2010 4
как я могу сделать это с помощью LINQ?
4 ответа:
var res = from element in list group element by element.F1 into groups select groups.OrderBy(p => p.F2).First();
awnser @Alireza полностью корректен, но вы должны заметить, что при использовании этого кода
var res = from element in list group element by element.F1 into groups select groups.OrderBy(p => p.F2).First();
который аналогичен этому коду, потому что вы упорядочиваете список, а затем выполняете группировку, чтобы получить первую строку групп
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