2014-04-07 1 views
4

저는 mvc에 익숙하지 않고 무엇을 잘못하고 있는지 아이디어를 얻으려는 시도가 Dbcontaxt 클래스linq 람다 식을 사용하여 'System.Data.Entity.Infrastructure.DbQuery`1 []'유형의 객체를 캐스팅 할 수 없습니다.

public class DataBaseContext : DbContext 
{ 
    public DataBaseContext() 
     : base("DefaultConnection") 
    { 
    } 
    public DbSet<Membership> Membership { get; set; } 
    public DbSet<OAuthMembership> OAuthMembership { get; set; } 
    public DbSet<Role> Roles { get; set; } 
    public DbSet<UserProfile> UserProfiles { get; set; } 
    public DbSet<Category> Categorys { get; set; } 
    public DbSet<SubCategory> SubCategorys { get; set; } 
    public DbSet<Product> Products { get; set; } 
    public DbSet<Color> Colors { get; set; } 
    public DbSet<Size> Sizes { get; set; } 
    public DbSet<Company> Companys { get; set; } 
    public DbSet<UsersInRoles> UsersInRoles { get; set; } 
    } 
} 

이와 내가보기를 추가하여 세부 사항보기를 만들고 내 모델로 AddUserToRole을 선택하기 위해 노력하고있어 컨트롤러에 강력하게 입력보기

[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; } 

} 
} 

을 만들기 위해 모델 클래스를 생성 강력한 유형보기

,210
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"; 
} 

<h2>Details</h2> 

<fieldset> 
    <legend>AddUserToRole</legend> 

<div class="display-label"> 
    @Html.DisplayNameFor(model => model.UserName) 
</div> 
<div class="display-field"> 
    @Html.DisplayFor(model => model.UserName) 
</div> 

<div class="display-label"> 
    @Html.DisplayNameFor(model => model.RoleName) 
</div> 
<div class="display-field"> 
    @Html.DisplayFor(model => model.RoleName) 
</div> 
</fieldset> 
<p> 
@Html.ActionLink("Edit", "Edit", new { id=Model.AddUserToRoleID }) | 
@Html.ActionLink("Back to List", "Index") 
</p> 

내가 무엇을해야보기를 제공 이 경우?

답변

13

당신이 그것을 구체화해야합니다. 쿼리의 끝에서 FirstOrDefault()를 넣어

var materializedUser = UserInRole.SingleOrDefault(); 
return View(materializedUser); 

편집 : SingleOrDefault()

+0

감사는 내가 무엇을 읽을 대답을 찾고 내가 너무 많은 시간을 가지고 작업을 릴레이로 FirstOrDefault()를 대체 표트르의 의견에 따라 'FirstOrDefault()'메쏘드는 어떤 일이 다시 일어 났는지 알아보기 위해 – Fadi

+0

실수를 잘 지적했다. 나는 그것을 놓쳤다. :) 1up from me –

+1

이 경우 SingleOrDefault가 더 적절할 것이다. – voidengine

관련 문제