C# Linq join()-连接两个实体并选择一个

C# Linq join()-连接两个实体并选择一个,c#,linq,join,C#,Linq,Join,有人能帮我解决以下linq问题吗 var userList = _context.Employee.AsQueryable(); var id = 1; userList = userList .Join(_context.EmployeePermission, ul => ul.EmployeeId, p => p.Emp

有人能帮我解决以下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?
无法隐式转换类型
“System.Linq.IQueryable”到
“System.Linq.IQueryable”。你缺演员吗?

如何解决?

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

(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 })
附言:

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

  • 您的员工在选择后不明显,因此有一个重复的员工,这有点奇怪
  • 您使用的是相同的上下文,大多数情况下可以使用上下文中定义的导航属性,而不是手动使用联接方法

  • 这可能有助于您为您的需求选择最佳方法。

    您可以通过不声明原始
    userlist
    变量来消除
    userlist
    userlist
    中的歧义。就从这个开始吧

    var id = 1;
    var users = 
        _context.Employee
                .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);
    

    现在,对于潜在的变量隐藏或大小写问题没有任何混淆。

    您不需要
    AsQueryable
    。使用SelectMany而不是Select@MohammadRezaRahimi
    SelectMany
    翻译成sql查询?干杯。这就解决了问题。如果你能指出代码的增强,那就太棒了。注意,我需要第一行代码,var userList=\u context.Employee.AsQueryable();我将其简化并粘贴到stackflow中,在我的代码中,它更复杂,并且原始用户列表在我的代码中被进一步过滤(根据某些条件)。