当前位置: 首页 > 面试题库 >

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

卫君博
2023-03-14
问题内容

我有一个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运行,因此需要在服务器端进行处理。


问题答案:

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

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();


 类似资料:
  • 问题内容: 在我的项目中,我使用Entity Framework6。我有以下实体: 和 当我插入一个填充了PersonRights的人员对象时,它在数据库中看起来像这样: 人员实体表: PersonRights实体表 当我从数据库加载人时,它没有填充PersonRights属性,这是因为virtual关键字具有延迟加载功能-可以。 然后我得到了person对象的PersonRights,它也可以正

  • 问题内容: 要获取包含整数的列的最大值,我可以使用以下T-SQL命令 是否有可能使用实体框架获得相同的结果。 假设我有以下模型 如何获得最大的年龄? 问题答案: 试试这个 并确保您位于文件的顶部

  • 如何在中按不同的值获取行? 例如,我有下面的数据框: 我想根据 中的唯一值获取行: 那么,我怎样才能得到呢?如果有人可以提供任何帮助,我将不胜感激。

  • 问题内容: 假设我有一个像这样的数据框 原始表更加复杂,具有更多的列和行。 我想获得满足某些条件的第一行。例子: 获取A> 3的第一行(返回第2行) 获取A> 4 AND B> 3的第一行(返回第4行) 获取第一行,其中A> 3 AND(B> 3 OR C> 2)(返回第2行) 但是,如果没有满足特定条件的行,那么我想在我按A降序排序(或者其他情况下按B,C等排序)后得到第一行 获取A> 6的第一

  • 我有一个表 和.一个类别可以有多个产品,我想为每个产品获取TOP 5产品和TOP 3类别。我试过了 但这是3个类别及其下的所有产品的输出。我试过了 但是当然它不起作用,因为不能在中调用。那么解决方案是什么?请建议。

  • 我有一个带有“Status”布尔值的付款模型,该布尔值默认为false。付款后,我需要将特定付款的“状态”更新为true。 这是我一直试图用来更改特定数据库条目的代码,但它并没有改变它。我做错了什么? 谢谢 这就是最终起作用的原因: