首页 > 解决方案 > Linq join() - 连接两个实体并选择一个

问题描述

有人可以帮我解决以下 linq 查询吗?

var userList = _context.Employee.AsQueryable();
var id = 1;
userList = userList                
           .Join(_context.EmployeePermission, 
                     ul => ul.EmployeeId,           
                     p => p.EmployeeId,             
               (userlist, perm) => new { Employee = userList, Permisson = perm }) 
            .Where(empAndPerm => empAndPerm.Permisson.Trading >= 1 && empAndPerm.Permisson.EmployeeId == id)
            .Select(x => x.Employee);

我收到以下错误;

Cannot implicitly convert type
'System.Linq.IQueryable<System.Linq.IQueryable<Models.Employee>>' to
'System.Linq.IQueryable<Models.Employee>'. Are you missing a cast?

如何解决?

标签: c#linqjoin

解决方案


您的代码中似乎有印刷错误

(userlist, perm) => new { Employee = userList, Permisson = perm })

userList必须替换为userlistuserList指的是System.Linq.IQueryable第一行:

var userList = _context.Employee.AsQueryable();

但是userlist指的是匿名方法的参数,它是正确的项目。

所以第七行必须改为:

(userlist, perm) => new { Employee = userlist, Permisson = perm })

后记:

您的代码需要一些不在此问题范围内的增强功能。这些增强功能取决于您的业务需求。但我提到了一些潜在的错误:

  1. 选择后您的员工并不明显,因此有一个重复的员工,这有点奇怪。
  2. 您正在使用相同的上下文,并且大多数时候您可以使用在上下文中定义的导航属性,而不是手动使用 join 方法。

DotnetFiddle 示例可能会帮助您选择最适合您需求的方法。


推荐阅读