小编典典

根据实体框架中的特定列获取不同的条目

sql

我有一个SQLite表,其中包含我们运行的每个测试结果,并且我希望编写一个实体框架查询,该查询仅返回每个项目的最新测试结果。

通常,我假设这将是“按项目ID分组,返回具有最大更新值的行”,或者“按日期排序并先返回”。但是,当我尝试查询时,我不断收到“无法翻译”实体框架错误。

这是我尝试过的:

results = await _context.Results
            .Include(x => x.Project)
            .AsNoTracking()
            .OrderByDescending(x => x.Updated)
            .GroupBy(x => x.ProjectId, (x, y) => y.First())
            .ToListAsync();

但是,我不断收到错误消息,该.First()命令表明Entity
Framework无法翻译该命令。是否有我所缺少的东西(或者替代地,一种更好的方式来编写对实体框架更友好的查询)?

我宁愿在服务器上做尽可能多的工作,因为项目数量很少,但是可能有成千上万的结果,如果可能的话,我宁愿不进行客户端过滤。

该应用程序是使用Entity Framework Core为ASP.NET Core 3.1编写的。

较小的编辑:在使用SQLite进行开发时,最终代码将针对SQL Server运行,因此需要在服务器端进行处理。


阅读 146

收藏
2021-04-14

共1个答案

小编典典

尝试使用子查询而不是分组。像这样:

results = await _context.Results
            .Include(x => x.Project)
            .AsNoTracking() 
            .Where( r => r.Id == _context.Results.Where( rr => rr.ProjectId == r.ProjectID).Max( rr => rr.Id) )
            .ToListAsync();
2021-04-14