Entity framework 使用实体框架从分组有序列表中获取最后n个项

Entity framework 使用实体框架从分组有序列表中获取最后n个项,entity-framework,linq-group,Entity Framework,Linq Group,我有一个表单列表,在这个列表中,标题相同的表单表示该表单的不同版本,创建时间最接近的表单(即日期时间类型)是较新的版本 所以我想使用实体框架代码选择每个表单的最后n个版本。我用过这个,但它仍然给我带来了第一个(最早的)n版本 List<Forms> dbResult = entities.Forms.OrderByDescending(e => e.CreationDate) .GroupBy(e =&g

我有一个表单列表,在这个列表中,标题相同的表单表示该表单的不同版本,创建时间最接近的表单(即日期时间类型)是较新的版本

所以我想使用实体框架代码选择每个表单的最后n个版本。我用过这个,但它仍然给我带来了第一个(最早的)n版本

List<Forms> dbResult = entities.Forms.OrderByDescending(e => e.CreationDate)
                                     .GroupBy(e => e.Title)
                                     .SelectMany(e => e.Take(n))
                                     .ToList();
List dbResult=entities.Forms.OrderByDescending(e=>e.CreationDate)
.GroupBy(e=>e.Title)
.SelectMany(e=>e.Take(n))
.ToList();
哪里出错?

试试这个:

var result = entities.Forms
            .GroupBy( x => x.Title )
            .SelectMany( g => g.OrderByDescending(v => v.CreationDate).Take(1) );

这将返回具有最大CreationDate的相同标题的表单。您可以进行额外的筛选,以获取n个项目并以任何方式进行订购。

非常感谢,效果非常好。我把它当作一个工具
List dbResult=entities.Forms.GroupBy(e=>e.Title)。选择many(e=>e.OrderByDescending(e=>e.CreationDate)。Take(3)).ToList()
您能告诉我selectMany中orderBy的用法吗?selectMany和orderBy的组合用于执行内部选择以获得具有max CreationDate的项目。所以我不确定你是否应该在那里做“take(3)”。我会再做一个。选择Many后再做(3)次,只得到3张表格。它按我希望的那样工作,再次感谢你的解释。我再次向你提问。是的,你是对的。这将返回3个相同标题的最新表格。