2017-03-28 90 views
0

我正在嘗試根據應用程序中的特定角色查找所有用戶。我目前有兩個角色管理員和用戶。當我嘗試去返回「用戶」與以下LINQ查詢一個角色的用戶的列表:根據特定角色查找用戶

var users = context.Users 
       .Where(u => u.Roles.Select(r => r.RoleId).Contains("User")).ToList(); 

則返回0用戶。我在這裏看過類似的問題,但其中很多已經過時。我知道RoleID例如是一個散列鍵,我正在搜索的是純文本「User」。

+1

FWIW,該ID是不是「散列鍵」,而是一個GUID,作爲一個字符串,而不是實際的'的Guid '。這是身份識別團隊的一個有爭議的選擇,是爲了最大程度的兼容性而作出的。儘管如此,你可以將其更改爲不同的類型,例如「int」。請參閱:https://docs.microsoft.com/en-us/aspnet/identity/overview/extensibility/change-primary-key-for-users-in-aspnet-identity。然而,這沒有任何意義影響你的問題。 –

+0

總是很好學習額外的背景信息,謝謝克里斯 –

回答

3

RoleId與實際的角色名稱字符串不一樣,所以這就是爲什麼你沒有得到任何匹配。你需要做的方式是:

var roleId = context.Roles.Where(m => m.Name == "User").Select(m => m.Id).SingleOrDefault(); 

然後:

var users = context.Users 
      .Where(u => u.Roles.Any(r => r.RoleId == roleId)).ToList(); 
相關問題