【问题标题】:C# Linq error 'DbSet() .GroupJoin( inner: DbSet(), outerKeySelector: ' could not be translatedC# Linq 错误 'DbSet() .GroupJoin( inner: DbSet(), outerKeySelector: ' 无法翻译
【发布时间】: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来更新代码

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    join 之后进行左连接时,将第二个 from 放置在后面。您也可以重用加入中的别名。

    var users =  
        from e in this.dbContext.Users
        join t in this.dbContext.Titles on e.UserId equals t.UserId into et
        from t in et.DefaultIfEmpty()  
        join d in this.dbContext.Dept on e.DeptId equals d.DeptId
        select new UserViewModel
        {
            UserId = UserId 
    
            EntryDate = e.EntryDate,
            Extension = t.Extension,
        };
    

    【讨论】:

      猜你喜欢
      • 2020-09-29
      • 2022-01-05
      • 2011-09-09
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多