ASP .NET Identity 2.0和LINQ复合查询与group by

时间:2015-08-13 13:17:14

标签: c# asp.net linq group-by

我使用ASP .NET Identity 2.0作为我的用户管理器。现在我想要检索RoleId与“4”不同的所有用户的列表。我的LINQ查询如下所示:

            var userList = from entry in this.UserManager.Users
                           from roles in entry.Roles
                           where roles.RoleId != "4"
                           group entry by entry.Id into g
                           select new { g.Id, g.UserName, g.Email, g.EmailConfirmed, g.PhoneNumber, g.PhoneNumberConfirmed, g.Roles };

不幸的是,group by完全不起作用,并且无法识别g的参数。没有分组,列表包含每个用户 - >角色的单独行,这不是我想要的效果。我的查询有什么问题?

编辑: 当然,每个用户都有许多角色。如果其中一个是RoleId == 4,那么我不希望他的记录被检索。

2 个答案:

答案 0 :(得分:1)

我认为没有必要进行分组。尝试这个更简单的查询:

 var userList = this.UserManager.Users
                  .Where(u => u.Roles.All(r => r.Id != "4"));

这应该可以为您提供所需的结果。

答案 1 :(得分:0)

var userList = (from entry in this.UserManager.Users
               //group entry by entry.Id into g  //I don't know why you need to group this,usually `id` is primary key
               select new { entry.Id, entry.UserName, entry.Email, entry.EmailConfirmed, entry.PhoneNumber, 
               entry.PhoneNumberConfirmed, Roles=entry.Roles.Where(r=>r.RoleId != "4").ToList() })
              .Where(g=>g.Roles.Count>0);

如果结果中没有角色,则会删除该用户

相关问题