linq - 查找一个列表中具有与另一个对象列表中的属性匹配的属性的所有对象
问题描述
问题
我正在尝试ModelA
使用另一个表(基于 ModelB)查询一个表(基于)。对于此示例,这些模型进行了简化。我需要将结果保留为IQueryable
,因此更改为Enumerable
or List
are not 选项。不过,我尝试添加.ToList()
但得到了同样的错误。
将MyId
s 从一个列表中拉到一个字符串列表中(以便使用Contains()
)不是一种选择,因为可能有太多MyIds
(> 40k)导致错误指示操作资源不足,我猜指内存。
错误
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));
有什么方法可以成功完成?
解决方案
您可以尝试检查第二个列表是否包含匹配 ID 的“Any()”
var results = context.ModelA
.Where(a => ModelB.Where(b => b.MyId == a.MyId).Any());
或者您可能想尝试加入
https://docs.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));
我有 Select 而不是 Where 并且我检查了空值
推荐阅读
- javascript - 从解码的音频中读取 Promise 的结果 - 缓冲区
- react-native - 单击通知时如何打开下载文件夹
- javascript - 具有关联值的 MongooseJS 枚举
- python - 在 Python 中编写变量添加和自定义结果
- java - Groovy 中 Map 的 .with() 方法是什么?
- python - 在 Python 中使用带有命令行输入的递归
- bash - shell脚本中的语法错误是什么
- mule - 如何在 Dataweave 中识别数组中的最后一个元素
- r - R - 如何在单图/多图网格中删除“分隔”线和背景 borcers
- discord.py - 我将如何仅使用歌曲的标题而不使用 url 播放歌曲以及如何修复队列