我使用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
,那么我不希望他的记录被检索。
答案 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);
如果结果中没有角色,则会删除该用户