C# 查询用户&;通过Linq的角色(ASP.NET标识)

C# 查询用户&;通过Linq的角色(ASP.NET标识),c#,asp.net-mvc,entity-framework,linq,asp.net-identity,C#,Asp.net Mvc,Entity Framework,Linq,Asp.net Identity,我想从数据库里找到病人和医生。我正在使用ASP.NET标识 相关表格包括AspNetUsers、AspNetRoles和AspNetUserRoles 这是我的问题: var result = from pateints in context.Users let pEmail = pateints.Email from doctors in context.Users from roles in context.Rol

我想从数据库里找到病人和医生。我正在使用ASP.NET标识

相关表格包括
AspNetUsers
AspNetRoles
AspNetUserRoles

这是我的问题:

var result = from pateints in context.Users
             let pEmail = pateints.Email
             from doctors in context.Users
             from roles in context.Roles
             where pateints.Roles.Any(r => r.RoleId == roles.Id && roles.Name == "Patient")
             where doctors.Roles.Any(r => r.RoleId == roles.Id && roles.Name == "Doctor") 
             select new { doctors.Email, pEmail };

我尽了最大努力找到问题,但此查询没有返回任何结果。

您只需加入所有三个实体,然后对角色名称应用筛选器,如下所示-

var result = from u in context.Users
             join ur context.UserRoles on u.Userid equal ur.Userid
             join r in context.Roles on r.Roleid equal ur.Roleid
             where r.Name == "Doctor" || r.Name == "Patient"
             select new {UserName = u.UserName, Email = u.Email, Role = r.Name };
UserName        Email           Role
abc xyz         abc@abc.com     Doctor
doc xyz         doc@abc.com     Doctor
pqr xyz         pqr@abc.com     Patient
lmn xyz         lmn@abc.com     Patient
示例输出如下所示-

var result = from u in context.Users
             join ur context.UserRoles on u.Userid equal ur.Userid
             join r in context.Roles on r.Roleid equal ur.Roleid
             where r.Name == "Doctor" || r.Name == "Patient"
             select new {UserName = u.UserName, Email = u.Email, Role = r.Name };
UserName        Email           Role
abc xyz         abc@abc.com     Doctor
doc xyz         doc@abc.com     Doctor
pqr xyz         pqr@abc.com     Patient
lmn xyz         lmn@abc.com     Patient
试试这个

    using(ApplicationDbContext db=new ApplicationDbContext())
    {
          var users = (from user in db.Users
                       from roles in user.Roles
                       join role in db.Roles
                       on roles.RoleId equals role.Id 
                       select new
                       {
                           user.UserName, 
                           role.Name
                       }).ToList(); 
    }

尝试使用Lambda而不是Linq表达式。Lambda易于阅读和调试。我真的很讨厌Linq表达式。请包括您的表。这些表是由Identity@llazarThank定义的,但我以前没有使用Lambda@IgorQuirino
pateints
上下文中。用户
或在
上下文中。角色