如何使用GROUP BY获取MAX行?

Pat*_*ick -1 c# sql linq

我有一个像这样构建的SQL表:

项目:

Id         ItemId     VersionId
---------- ---------- ----------
1          1          1
2          1          2
3          1          3
4          2          1
5          2          2
6          3          1
Run Code Online (Sandbox Code Playgroud)

现在我想用linq选择每个项目的最新版本.预期的产出是:

Id         ItemId     VersionId
---------- ---------- ----------
3          1          3
5          2          2
6          3          1
Run Code Online (Sandbox Code Playgroud)

每个项目都有自己的版本计数,因此创建项目1的新版本将为其提供VersionId 4,而创建项目3的新版本将为其提供VersionId为2.

到目前为止,我试图选择项目,然后使用GroupBy:

var query = from i in items
            select i;

var test = query.GroupBy(q => q.ItemId).ToList();
Run Code Online (Sandbox Code Playgroud)

这将返回3个组的列表,每个项目一个组.

现在,我将如何继续并获取这些组中仅包含最新版本项目的列表?

nvo*_*igt 5

如果您想要最高版本,可以订购每个组,并在订购后只选择最高版本:

var test = query.GroupBy(q => q.ItemId)
                .Select(group => group.OrderByDescending(g => g.VersionId).First())
                .ToList();
Run Code Online (Sandbox Code Playgroud)