我有一个这样构建的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组的列表,每个项目一组。
现在我将如何继续从这些组中获取最新版本的项目列表?
答案 0 :(得分:5)
如果您想要最高的版本,则可以订购每个组,订购后只能购买最高的版本:
var test = query.GroupBy(q => q.ItemId)
.Select(group => group.OrderByDescending(g => g.VersionId).First())
.ToList();