无法使用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

AddUserToRole
@Html.DisplayNameFor(model => model.UserName)
@Html.DisplayFor(model => model.UserName)
@Html.DisplayNameFor(model => model.RoleName)
@Html.DisplayFor(model => model.RoleName)

@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()