LINQ-запрос для получения строки с максимальной датой в сгруппированной таблице

У меня есть следующая структура данных

ID    Date            Vendor  Grade
 1    20-nov-2013     xyz      A
 2    26-Apr-2013     abc      B
 1    21-nov-2013     pqr      D
 1    10-nov-2013     abc      C
 2    15-dec-2013     pqr      A
 2    20-May-2013     abc      B

Что я хочу сгруппировать эту таблицу по столбцу ID а затем выберите строку с максимальным значением dateTime

Пример ответа будет для этой таблицы

ID    Date            Vendor  Grade
 1    21-nov-2013     pqr      D
 2    15-dec-2013     pqr      A

До сих пор я пытался следовать, но не знал, что делать дальше

var chk = (from s in dt.AsEnumerable()
          where s.Field<int>("ID") == 1 || s.Field<int>("ID") == 2            
          select s).GroupBy(k => k.Field<int>("ID")});

2 ответа

Решение

Сгруппируйте свои строки по IDзатем сортируйте каждую группу строк по Date и выберите первую строку:

var chk = from r in dt.AsEnumerable()
          let id = r.Field<int>("ID")
          where id == 1 || id == 2
          group r by id into g
          select g.OrderByDescending(r => r.Field<DateTime>("Date")).First();

Производит

ID    Date            Vendor  Grade
 1    21-nov-2013     pqr      D
 2    15-dec-2013     pqr      A

Синтаксисзапроса:

  var chk = from r in dt.AsEnumerable() /*where 1=1 */
                  group r by r.Field<int>("ID") into g
                  select g.OrderByDescending(t => t.Field<int>("ID")).First();

Свободный синтаксис:

 dt.AsEnumerable().GroupBy(r => r.Field<int>("ID")).Select(g => g.OrderByDescending(t => t.Field<int>("ID")).First());
Другие вопросы по тегам