C# Linq join()-连接两个实体并选择一个
有人能帮我解决以下linq问题吗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
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@MohammadRezaRahimiSelectMany
翻译成sql查询?干杯。这就解决了问题。如果你能指出代码的增强,那就太棒了。注意,我需要第一行代码,var userList=\u context.Employee.AsQueryable();我将其简化并粘贴到stackflow中,在我的代码中,它更复杂,并且原始用户列表在我的代码中被进一步过滤(根据某些条件)。