【发布时间】:2020-06-09 09:47:54
【问题描述】:
问题
我正在尝试使用另一个表(基于 ModelB)查询一个表(基于 ModelA)。对于此示例,这些模型进行了简化。我需要将结果保留为IQueryable,因此更改为Enumerable 或List 不是选项。不过,我尝试添加.ToList(),但得到了同样的错误。
将MyIds 从一个列表中拉到一个字符串列表中(以便使用Contains())不是一种选择,因为可能有太多MyIds(> 40k)会导致错误指示资源耗尽的操作,我猜是指 RAM。
错误
InvalidOperationException:无法翻译 LINQ 表达式 ...。以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。
模型A
public class ModelA
{
public string MyId { get; set; }
public string MyName { get; set; }
}
模型B
public class ModelB
{
public string MyId { get; set; }
public string MyName { get; set; }
}
尝试
var results = context.ModelA
.Where(a => ModelB.All(b => b.MyId == a.MyId));
什么方法可以成功?
【问题讨论】:
-
var results = context.ModelA.Where(a => ModelB.Any(b => b.MyId == a.MyId)); -
是的,
Any是正确的方法。谢谢。
标签: linq asp.net-core entity-framework-core ef-core-3.1