使用LINQ Grouping获取最大记录,而不是值

时间:2013-01-25 17:57:16

标签: entity-framework linq-to-entities

我已经看到分组示例以获得总和或其他聚合函数输出,但我仍然试图获得与分组标准匹配的“记录”,我不需要聚合值。让我解释一下我的情况:

我使用LINQ到EF,我有一个表,Entity_Revisions包含Entity_Id,Entity_Revision_Number和许多其他列。 Entity_Revision_Number就像是实体的一个版本。所以我想要LINQ查询给我最新版本。以下是数据类型:

 Entity_Id Entity_Revision_Number
 1         0
 1         1
 2         0
 3         0
 3         1

我需要一个返回记录1,1 2,0和3,1的查询。我需要的查询有点

from e in ENTITY_REVISIONs
<some joins>
<some where>
group e by e.ENTITY_ID into g
select g <where max(g.entity_revision_number)>

是否可以将ENTITY_REVISIONs类型作为输出而不是以新的{}匿名类型的形式?

2 个答案:

答案 0 :(得分:3)

按ID分组,按修订号降序排列每个组,并获得每组的第一个值应该没问题:

var query = from e in ENTITY_REVISIONs
            group e by e.ENTITY_ID into grp
            select grp.OrderByDescending(x => x.entity_revision_number).First();

答案 1 :(得分:0)

我认为你正在寻找这个:

var query = 
 from e in ENTITY_REVISIONs
 group e by e.ENTITY_ID into g
 select new {
   Entity_Id = g.Key,
   Entity_Revision_number = (from e in ENTITY_REVISIONs
                             where e.ENTITY_ID == g.Key
                             select e.entity_revision_number).Max()
 };