2015-11-30 2 views
1

Я пытаюсь отсортировать мой Linq запрос на 2 колонки: SEQ и версия:Linq сортировать по 2 колонки с FirstOrDefault

стол:

id | seq | version 
01 | 1 | 1 
02 | 1 | 2 
03 | 1 | 1 
04 | 2 | 2 
05 | 2 | 3 
06 | 3 | 1 

Мой запрос:

var events = from x in db.Events 
         group x by x.Seq into s 
         select s.OrderBy(z => z.Seq).OrderByDescending(z => z.version).FirstOrDefault(); 

Текущий результат:

id | seq | version 
05 | 2 | 3 
06 | 3 | 1 
02 | 1 | 2 

Желаемый результат:

id | seq | version 
02 | 1 | 2 
05 | 2 | 3 
06 | 3 | 1 

Проблема, как представляется, сочетание или 2 OrderBy и FirstOrDefault(). Каков правильный запрос для решения этой проблемы?

ответ

1

Правильный путь к первой группе seq, то заказ на version и взять нужный единственный результат, и, наконец, сортировать образовавшееся устанавливается seq , как это

var events = data 
    .GroupBy(x => x.seq, (key, items) => items.OrderByDescending(x => x.version).FirstOrDefault()) 
    .OrderBy(x => x.seq); 
2

FIXED

var events = (from x in db.Events 
      group x by x.Seq into s 
      select s.OrderByDescending(z => z.version).FirstOrDefault()).OrderBy(z => z.Seq); 

См работает Fiddle

+0

Это дает тот же результат как в моих вопросах –

+0

Ответ @JasonB Alex верен, даже правильный код в вашем ответе – user449689

+0

См. рабочую скрипту с вашими данными, которые дают желаемый результат. –