c# - 在其他 LINQ 查询中使用来自 LINQ 查询的结果的问题
问题描述
我正在尝试根据另一个表中的外键从表中选择元素。我的代码如下所示:
var account = await _context.Accounts.FirstAsync(a => a.Id == new Guid(id) && a.UserId == new Guid(user.Id));
if (account == null) return NotFound();
var detaillines = await _context.DetailLines.Where(d => new Guid(d.Account) == account.Id).ToListAsync();
它因错误而失败:
无法翻译 LINQ 表达式“DbSet .Where(d => new Guid(d.Account) == __account_Id_0)”。以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038。
为什么我无法在第一个查询中使用我在第二个查询中拥有的帐户的 ID?
更新:
对第二个 LINQ 查询的以下更改解决了它:
var detailLinesForAccount = _context.DetailLines
.AsEnumerable()
.Where(d => new Guid(d.Account) == account.Id).ToList();
解决方案
new Guid(...)
无法翻译。尝试将此代码用于第一部分:
var guide = new Guid(id);
var userGuid = new Guid(user.Id);
var account = await _context.Accounts.FirstAsync(a => a.Id == guide && a.UserId == userGuid);
if (account == null) return NotFound();
但是对于第二部分,您必须使用客户评估或更改设计或逻辑。客户评价:
var detaillines = await _context.DetailLines
.AsEnumerable().Where(d => new Guid(d.Account) == account.Id).ToListAsync();
使用客户端评估时要小心,并考虑潜在的内存泄漏等。
更多详情:
客户端评估:如果查询中的顶级投影无法转换到服务器(提供者无法了解该方法是如何实现的),EF Core 将从服务器获取任何所需的数据并评估其余部分在客户端查询。(需要将所有数据拉入内存才能在客户端应用过滤器。)
推荐阅读
- r - 使用 forcats 将数字列更改为因子
- amazon-web-services - 如何将 xray trace id 发送到 AWS 上的 API 网关?
- html - 难以在 HTML 表单中对齐输入字段
- jqgrid - 键入时 jqGrid 工具栏未过滤
- r - 在具有多个值的单元格的列上过滤闪亮的数据表
- r - 如何根据 list() 中的相应值替换 dataframe() 中的值?
- html - 如何使用 javascript/css 使父 div 和兄弟 div 变灰
- swift - iOS14 SwiftUI 的选取器支持
- r - 从字符名称矩阵移动到这些名称的向量(对于 fMRI 数据)
- firebase - 我是否正确使用 Firestore 索引?