Linq join() - 加入两个实体并选择一个

Has*_* Sd 5 c# 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);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误;

Cannot implicitly convert type
'System.Linq.IQueryable<System.Linq.IQueryable<Models.Employee>>' to
'System.Linq.IQueryable<Models.Employee>'. Are you missing a cast?
Run Code Online (Sandbox Code Playgroud)

如何解决?

Moh*_*imi 2

您的代码中似乎存在打字错误

(userlist, perm) => new { Employee = userList, Permisson = perm })
Run Code Online (Sandbox Code Playgroud)

userList必须替换为userlistuserListSystem.Linq.IQueryable在第一行引用:

var userList = _context.Employee.AsQueryable();
Run Code Online (Sandbox Code Playgroud)

userlist引用的是匿名方法的参数,这是正确的项目。

所以第七行必须改为:

(userlist, perm) => new { Employee = userlist, Permisson = perm })
Run Code Online (Sandbox Code Playgroud)

后记:

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

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

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