【发布时间】:2013-04-26 19:59:27
【问题描述】:
我在项目表和审计表之间存在一对多关系。我试图从审计表中挑选出每个项目实体的最新条目。
据我所知,我应该能够在按项目 ID 分组之前按日期对我的审计集合进行排序,以便我可以为每个组(项目 ID)选择第一个条目以获取最新条目。
但是当我运行我的 ef/linq 查询时,结果不正确并且 order-by 似乎被忽略了——即使生成的 sql 也不包含 order by 语句。
这是我尝试过的简单示例。
using (var ctx = new MyDbContext())
{
var audit = from a in ctx.ProjectAudits
orderby a.CreatedDate descending
group a by a.ProjectId into grp
select grp.FirstOrDefault();
var resultsList = audit.ToList();
}
结果总是返回每个项目 ID 最早的审计条目,而不是最新的。
这个查询有问题吗?我错过了什么明显的东西吗?
【问题讨论】:
-
排序会影响结果,而不是您要加入的表。
-
@Jodrell 好的,那么我如何确保当我获得每个组的第一个条目时,第一个是最新的?
-
您不能在 T-SQL 中的单个语句中真正做到这一点 - 按项目 ID 分组将为每个项目 ID 提供一行,并为其他列提供聚合值 - 您需要子查询获取每个项目的第一项,不确定如何转换为 EF 或 Linq...
-
@Charleh 这就是我面临的问题 - 我可以使用子查询编写 sql(实际上没有 group by),但将 ef 翻译成对我不起作用的位 - 我发现这个答案stackoverflow.com/a/4014958/81053 最初进行分组,然后使用它来支持另一个查询,即选择实体,其中只有一个加入实体 - 我已经接受了这个并添加了订单 - 但它不起作用.. .
标签: c# linq entity-framework