Как получить максимальную строку с GROUP BY? - PullRequest
0 голосов
/ 25 июня 2018

У меня есть таблица SQL, которая создается следующим образом:

Items:

Id         ItemId     VersionId
---------- ---------- ----------
1          1          1
2          1          2
3          1          3
4          2          1
5          2          2
6          3          1

Теперь я хотел бы использовать linq для выбора последней версии каждого элемента.Ожидаемый результат будет:

Id         ItemId     VersionId
---------- ---------- ----------
3          1          3
5          2          2
6          3          1

Каждый элемент имеет свой собственный счетчик версий, поэтому создание новой версии элемента 1 даст ему VersionId 4, тогда как создание новой версии Item 3 даст ему VersionIdиз 2.

До сих пор я пытался выбрать элементы, а затем использовать GroupBy:

var query = from i in items
            select i;

var test = query.GroupBy(q => q.ItemId).ToList();

Возвращает список из 3 групп, по одной группе для каждого элемента.

Теперь, как мне продолжить и получить список только элементов последней версии из этих групп?

1 Ответ

0 голосов
/ 25 июня 2018

Если вы хотите самую высокую версию, вы можете заказать каждую группу и взять только верхнюю версию после заказа:

var test = query.GroupBy(q => q.ItemId)
                .Select(group => group.OrderByDescending(g => g.VersionId).First())
                .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...