无法使用linq lambda表达式转换’System.Data.Entity.Infrastructure.DbQuery`1 ‘类型的对象
我是mvc的新手并试图了解我做错了什么我创建了一个Dbcontaxt
类
public class DataBaseContext : DbContext { public DataBaseContext() : base("DefaultConnection") { } public DbSet Membership { get; set; } public DbSet OAuthMembership { get; set; } public DbSet Roles { get; set; } public DbSet UserProfiles { get; set; } public DbSet Categorys { get; set; } public DbSet SubCategorys { get; set; } public DbSet Products { get; set; } public DbSet Colors { get; set; } public DbSet Sizes { get; set; } public DbSet Companys { get; set; } public DbSet UsersInRoles { get; set; } } }
我创建了一个模型类来创建一个强类型视图
[Bind(Exclude = "AddUserToRoleID")] public class AddUserToRole { [ScaffoldColumn(false)] public int AddUserToRoleID { get; set; } [Required] [Display(Name = "User name")] public string UserName { get; set; } [Required] [Display(Name = "Role name")] public string RoleName { get; set; } } }
在控制器中我试图通过添加视图创建详细信息视图,并选择AddUserToRole
作为强类型视图的模型
public ActionResult Details(int id = 0) { var UserInRole = db.UserProfiles .Join(db.UsersInRoles, u => u.UserId, uir => uir.UserId, (u, uir) => new {u = u,uir = uir}) .Join(db.Roles, temp0 => temp0.uir.RoleId, r => r.RoleId, (temp0, r) => new { temp0 = temp0,r = r }) .Where(temp1 => (temp1.temp0.u.UserId == id)) .Select(temp1 => new AddUserToRole { AddUserToRoleID = temp1.temp0.u.UserId, UserName = temp1.temp0.u.UserName, RoleName = temp1.r.RoleName }); return View(UserInRole); }
它给了我这个错误
The model item passed into the dictionary is of type 'System.Data.Entity.Infrastructure.DbQuery`1[SeniorProject.Models.AddUserToRole]', but this dictionary requires a model item of type 'SeniorProject.Models.AddUserToRole'.
当我转换return View((UsersInRoles)UserInRole);
它给了我这个错误
Unable to cast object of type 'System.Data.Entity.Infrastructure.DbQuery`1[SeniorProject.Models.AddUserToRole]' to type'SeniorProject.Models.UsersInRoles'.
和观点
@model SeniorProject.Models.AddUserToRole @{ ViewBag.Title = "Details"; } Details
@Html.ActionLink("Edit", "Edit", new { id=Model.AddUserToRoleID }) | @Html.ActionLink("Back to List", "Index")
在这种情况下我该怎么办?
你需要实现它。 将FirstOrDefault()放在查询的末尾
var materializedUser = UserInRole.SingleOrDefault(); return View(materializedUser);
编辑:跟随pjotr评论用SingleOrDefault()替换FirstOrDefault()