c# - 在 lambda 查询中使用“.Any()”会在 .net core EF 项目中引发错误
问题描述
我有这个下面的查询,其中抛出了下面提到的错误,它曾经在另一个项目中工作,但不能在.net核心项目中运行。
var lstAppForm = await _appDBContext.ApplicationForms.Where(qr => appFormViewModel.Any(any => any.kycId == qr.id )).ToListAsync();
无法翻译 LINQ 表达式“DbSet .Where(a => __appFormViewModel_0 .Any(any => any.kycId == a.id))”。以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038。
解决方案
问题是表达式不能翻译为 sql,因为appFormViewModel
它不是数据库中的实体。它是您的 UI 视图模型,与数据库没有任何直接关系,因此它不应该以任何方式成为您的 EF 查询的一部分。
我们可以做的是将所需数据投影到 EF 查询之外Select
,然后在 EF 的 Linq 查询中使用它:
var ids = appFormViewModel.Select(x => x.kycId).ToList();
var lstAppForm = await _appDBContext.ApplicationForms
.Where(qr => ids.Contains(qr.id))
.ToListAsync();
或者:
var ids = appFormViewModel.Select(x => x.kycId).ToList();
var lstAppForm = await _appDBContext.ApplicationForms
.Where(qr => ids.Any(a => a == qr.id))
.ToListAsync();
推荐阅读
- java - 添加填充有文本的 JTextArea/JTextPane 时防止 JSscrollPane 调整大小
- javascript - 迁移到 Firebase Admin SDK 后 Firebase 实时数据库规则出现问题
- angular - NzModal Angular 单元测试 aferClose
- jenkins - 如何触发 Autosys CA 以通过 Jenkins 部署 JIL 文件
- php - How can I change key in array of unlimited nested children from Eloquent query
- java - 我需要从网格视图中打开一个新活动。安卓工作室(Java)
- laravel - 当试图显示一个包含 Laravel 集体表单的视图(edit.blade.php)时,给出“为 foreach() 提供的参数无效” - Laravel
- python - 使用 Statsmodels 分解年度时间序列
- tensorflow - 如何使用随机梯度下降学习归一化流
- arrays - 反应过滤嵌套对象