2012-06-28 57 views
4

有誰知道爲什麼我收到此錯誤:

The model item passed into the dictionary is of type 
system.Data.Entity.DynamicProxies.Object_3E186F803589BF82895B10E08C 
2A9AB68EFA619599418D6EB96585D14874CDC0', 
but this dictionary requires a model item of type 
'System.Collections.Generic.IEnumerable`1[MyApplication.Domain.Entities.Object]'. 

這裏是我的代碼:傳遞到字典的模型項的類型爲「System.Data.Entity.DynamicProxies.Object

控制器:

 public ViewResult Index() 
    { 
     if (User.Identity.IsAuthenticated) 
     { 
      MembershipUser currentUser = Membership.GetUser(); 
      Guid currentUserId = (Guid)currentUser.ProviderUserKey; 
      if (currentUser != null && currentUser.ProviderUserKey != null && currentUser.IsApproved) 
      { 
       Move result = (from move in db.Moves 
         where move.UserId == currentUserId 
         select move).FirstOrDefault(); 
       return View(result); 
      } 
     } 
     return View(db.Moves.ToList()); 
    } 

查看:

@model IEnumerable<MovinMyStuff.Domain.Entities.Move> 
@{ 
ViewBag.Title = "Index"; 
} 

@foreach (var item in Model) 
{ 
<div id="move-list-item"> 
    <ul> 
     <li> 
      <span class="move-name"> 
       @Html.DisplayFor(modelItem => item.StartCity) 
       @Html.DisplayFor(modelItem => item.StartState) 
       @Html.DisplayFor(modelItem => item.StartZip) - 
       @Html.DisplayFor(modelItem => item.EndCity) 
       @Html.DisplayFor(modelItem => item.EndState) 
       @Html.DisplayFor(modelItem => item.EndZip) 
      </span> 
     </li> 
     <li>@Html.ActionLink("Details", "Details", new { id = item.MoveId }, new { @class = "button" })</li> 
    </ul> 
</div> 
} 

回答

4

此代碼:

Move result = (from move in db.Moves 
     where move.UserId == currentUserId 
     select move).FirstOrDefault(); 
return View(result); 

試圖返回一個結果。這是抱怨,它想要一個序列的結果。所以,你可以只使用:

var results = (from move in db.Moves 
       where move.UserId == currentUserId 
       select move).Take(1).ToList(); 
return View(results); 

或者:

Move result = (from move in db.Moves 
     where move.UserId == currentUserId 
     select move).FirstOrDefault(); 
return View(new[] { result }); 

我會親自動手在這裏擺脫了查詢表達式的,順便說一句 - 這是使代碼比它需要更加複雜。例如,你可以重寫我的第一個選項爲:

var results = db.Moves.Where(move => move.UserId == currentUserId) 
         .Take(1) 
         .ToList(); 
return View(results); 

甚至:

return View(db.Moves.Where(move => move.UserId == currentUserId) 
       .Take(1).ToList()); 
+0

我得到這個錯誤,當我加入。取(1) - 錯誤無法隱式轉換鍵入'System.Linq.IQueryable '到'MovinMyStuff.Domain.Entities.Move'。存在明確的轉換(您是否缺少演員?) –

+0

而不是.Take(1)我會執行.TakeWhile()嗎? –

+0

而不是採取(1)我將如何採取儘可能多的用戶已創建? –

相關問題