2014-11-22 34 views
2

我有兩個由ASP.NET身份使用的類。一個是用戶列表的支持類,另一個是角色。在數據庫中有三個表。 AspNetUsers,AspNetRoles和AspNetUserRoles。因爲這樣,他們在實體框架映射這三個被映射到只有兩個類:如何使用LINQ限制包含類的數據?

public partial class AspNetUser 
{ 
    public AspNetUser() 
    { 
     this.AspNetUserClaims = new List<AspNetUserClaim>(); 
     this.AspNetUserLogins = new List<AspNetUserLogin>(); 
     this.AspNetRoles = new List<AspNetRole>(); 
    } 
    public int Id { get; set; } 
    public virtual ICollection<AspNetRole> AspNetRoles { get; set; } 
    public virtual ICollection<AspNetUserClaim> AspNetUserClaims { get; set; } 
    public virtual ICollection<AspNetUserLogin> AspNetUserLogins { get; set; } 
} 

public partial class AspNetRole 
{ 
    public AspNetRole() 
    { 
     this.AspNetUsers = new List<AspNetUser>(); 
    } 

    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<AspNetUser> AspNetUsers { get; set; } 
} 

誰能告訴我怎麼可以創建檢索所有的LINQ的聲明具有特定角色類型的用戶,或者如果我提供角色爲零的角色,那麼我希望看到所有用戶,而不是限制roleId。這裏是我的嘗試:

 var user = await db.AspNetUsers 
      .Where(u => u.AspNetRoles.SelectMany(r => r.Id == roleId || roleId == 0)) 
      .Include(u => u.AspNetRoles); 

我也試過:

 var user = await db.AspNetUsers 
      .Where(u => u.AspNetRoles.Select(r => r.Id == roleId || roleId == 0)) 
      .Include(u => u.AspNetRoles); 
+3

參數的函數'Where'是需要返回'bool',所以你可以嘗試'。凡(U =>角色ID =一個FUNC = 0 || u.AspNetRoles.Any(r => r.Id == roleId))'或者類似這樣的 – Grundy 2014-11-22 09:25:05

+0

可以請你把這個作爲答案,這樣我就可以接受了。謝謝 – 2014-11-22 09:51:52

回答

2

Where參數

謂詞
類型:System.Linq.Expressions.Expression < Func鍵< TSource ,布爾>>
用於測試條件的每個元素的函數。

,所以你需要通過返回bool

.Where(u => roleId == 0 //if roleId is 0 return all 
     || u.AspNetRoles.Any(r => r.Id == roleId) // check that user have any roles with id equals to roleId 
    )