use*_*284 4 linq entity-framework-core asp.net-core ef-core-3.1
问题
ModelA我正在尝试使用另一个表(基于 ModelB)查询一个表(基于 )。本例中这些模型已被简化。我需要将结果保留为IQueryable,因此更改为Enumerable或List不是选项。尽管如此,我尝试添加.ToList()但遇到了同样的错误。
将MyIds 从一个列表中拉出到字符串列表中(为了使用Contains())不是一种选择,因为可能有太多MyIds(> 40k)会导致错误,指示操作耗尽资源,我猜这是指的是内存。
错误
InvalidOperationException:LINQ 表达式...无法翻译。以可翻译的形式重写查询,或者通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用来显式切换到客户端计算。
A型
public class ModelA
{
public string MyId { get; set; }
public string MyName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
B型
public class ModelB
{
public string MyId { get; set; }
public string MyName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
试图
var results = context.ModelA
.Where(a => ModelB.All(b => b.MyId == a.MyId));
Run Code Online (Sandbox Code Playgroud)
有哪些方法可以成功完成此任务?
小智 5
您可以尝试检查第二个列表是否包含匹配 ID 的“Any()”
var results = context.ModelA
.Where(a => ModelB.Where(b => b.MyId == a.MyId).Any());
Run Code Online (Sandbox Code Playgroud)
或者您可能想尝试加入
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/join-clause
var results = context.ModelA
.Where(a => ModelB.
Any(b => b!= null && b.id != null
&& a!=null && a.id!==null &&
b.MyId == a.MyId));
Run Code Online (Sandbox Code Playgroud)
我选择了 Select 而不是Where,并且检查了空值
| 归档时间: |
|
| 查看次数: |
2609 次 |
| 最近记录: |