【发布时间】:2020-05-22 09:08:19
【问题描述】:
我们正在使用 EFCore 3.1 并尝试使用 Exists 通过跨越 2 个属性的 .Any() 构建查询。
var selectionCriteria = someHugeList.Select(sh => new { sh.Id, sh.StatusCode }).ToList()
var resultsQry = _myContext.SomeClass
.Include(sc => sc.DetailRecords)
.Where(sc => selectionCriteria.Any(crit => crit.Id == sc.Id
&& crit.StatusCode == sc.StatusCode));
var results = await resultsQry.ToListAsync()
在运行此查询时(即使有少量(5 项)选择条件项,它也会提供以下错误消息;
System.InvalidOperationException: LINQ 表达式 'DbSet .Where(c => __selectionCriteria_0 .Any(crit => crit.Id == sc.Id && crit.StatusCode == sc.StatusCode))' 无法翻译。 要么以可以翻译的形式重写查询,要么通过以下方式显式切换到客户端评估 插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用。 请参阅https://go.microsoft.com/fwlink/?linkid=2101038 了解更多信息。'
似乎问题在于 .Any 子句中包含 2 个属性。 sql中存在的where通常可以毫无问题地做到这一点。 EFCore 似乎觉得这很困难。
有人知道如何解决这个问题吗?
【问题讨论】:
标签: entity-framework linq exists any ef-core-3.1