首页 > 解决方案 > 加入未按预期工作(实体框架)

问题描述

我一生无法弄清楚如何使用实体框架在 UserName 上加入这两个表。

我尝试了语句和方法,但都没有奏效。

这些表肯定有相同的用户

var employees = _context.Employees.Include(e => e.Loc);

//Only show employees with a user role of manager
var managerUsers = await _userManager.GetUsersInRoleAsync("Manager");

var match = (from e in employees
                     join m in managerUsers on e.UserName equals m.UserName
                     select new { Employee = e }).ToList();

因此,简短的代码分解我从数据库上下文中获得了所有员工的列表。我查看用户角色以查找具有 Manager 角色的用户列表。员工也有一个用户名字段,我尝试使用用户名字段加入他们。当前在两个表中都有一位经理正确返回了匹配的用户名,但在此代码之后,匹配有 0 个结果。

我也试过这样:

employees.Join(managerUsers,
               e => e.UserName,
               m => m.UserName,
               (e,m) => new { e }).ToList();   

但这也不会返回任何记录。我究竟做错了什么?

标签: c#linqentity-framework-coreidentity

解决方案


自己想出了一个解决方案

        var managerEmployees = new List<Employee>();

        for(int a = 0; a< selectManagersList.Count(); a++)
        {
            var found = await _context.Employees.FirstOrDefaultAsync(u=> u.UserName == managerUsers.ElementAt(a).UserName);
            if (found!=null)
            {
                managerEmployees.Add(found);
            }
        }

推荐阅读