如何使用GROUP BY获取MAX行?

时间:2018-06-25 08:05:32

标签: 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

现在,我想使用linq选择每个项目的最新版本。预期的输出将是:

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

每个商品都有自己的版本计数,因此,制作新版本的商品1会给它一个VersionId 4,而制作一个新版本的商品3会给它一个VersionId 2。

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

var query = from i in items
            select i;

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

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

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

1 个答案:

答案 0 :(得分:5)

如果您想要最高的版本,则可以订购每个组,订购后只能购买最高的版本:

var test = query.GroupBy(q => q.ItemId)
                .Select(group => group.OrderByDescending(g => g.VersionId).First())
                .ToList();