May*_*ank 2 c# entity-framework entity-framework-core
我在下面的查询中抛出了下面提到的错误,它曾经在另一个项目中工作,但无法在 .net 核心项目中运行。
var lstAppForm = await _appDBContext.ApplicationForms.Where(qr => appFormViewModel.Any(any => any.kycId == qr.id )).ToListAsync();
Run Code Online (Sandbox Code Playgroud)
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();
Run Code Online (Sandbox Code Playgroud)
或者:
var ids = appFormViewModel.Select(x => x.kycId).ToList();
var lstAppForm = await _appDBContext.ApplicationForms
.Where(qr => ids.Any(a => a == qr.id))
.ToListAsync();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
377 次 |
| 最近记录: |