我有兩個由ASP.NET身份使用的類。一個是用戶列表的支持類,另一個是角色。在數據庫中有三個表。 AspNetUsers,AspNetRoles和AspNetUserRoles。因爲這樣,他們在實體框架映射這三個被映射到只有兩個類:如何從一次到多次使用LINQ獲取SingleOrDefault值?
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聲明。請注意,我只想獲得與用戶關聯的第一個角色。下面是我的嘗試:
var user = await db.AspNetUsers
.Where(u => u.AspNetRoles.Any(r => r.Id == roleId) || roleId == 0)
.Include(u => u.AspNetRoles)
.Select(u => new UserDTO
{
Email = u.Email,
RoleSingleId = u.AspNetRoles.SingleOrDefault(r => r.Id),
UserId = u.Id,
UserName = u.UserName
})
.ToListAsync();
但是這給了我兩個錯誤與藍線r.Id
下錯誤4無法轉換lambda表達式的委託類型「System.Func」,因爲一些返回類型 在塊中不能隱式轉換爲委託返回類型
錯誤5不能將類型'int'隱式轉換爲'bool'C:\ App \ ab41 \ Admin1 \ WebRole1 \ Controllers \ Web API - Data \ UserController。 cs 169 71 WebRole1
注意RoleSingleId被聲明爲一個int,而AspNetRoles中的Id也是一個int。
正如所發佈的那樣,您錯過了'.Where'這一行的結束語。 – dursk 2014-11-23 15:29:52