【发布时间】:2021-09-10 23:09:54
【问题描述】:
我正在尝试在 lamdba 表达式中将旧的选择查询重写为 EF Core,但它会引发以下错误。
var users=
(
(from e in this.dbContext.Users
join t in this.dbContext.Titles
on e.UserId equals t.UserId
into et
join d in this.dbContext.Dept
on e.DeptId equals d.DeptId
from et_left in et.DefaultIfEmpty()
select
{
UserId = UserId
EntryDate=e.EntryDate,
Extension = et_left.Extension,
}));
这编译和执行没有任何错误。当我单步检查用户时,我在测试中看不到计数。 它返回一个 Queryable 对象,代码继续过滤,如下所示
users= users(s => s.IsActive("Y"));
它确实有效,但将鼠标悬停在用户对象上不会显示结果
LINQ 表达式 'DbSet() .GroupJoin( inner: DbSet(), outerKeySelector: e => e.UserId, innerKeySelector: t => t.UserId, resultSelector: (e, et) => new { e = e, et = et })' 无法翻译。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用显式切换到客户端评估。
var users=
(
(from e in this.dbContext.Users
join t in this.dbContext.Titles
on e.UserId equals t.UserId
into et
join d in this.dbContext.Dept
on e.DeptId equals d.DeptId
from et_left in et.DefaultIfEmpty()
select new UserViewModel
{
UserId = UserId
EntryDate=e.EntryDate,
Extension = et_left.Extension,
})).ToList();
我不确定何时添加 .ToList 会引发错误
我想隐蔽到List来更新代码
【问题讨论】: