2010-05-05 40 views
3

我正在創建一個示例電影(MVC)應用程序。我是越來越細跟查看和創建一個新的記錄,但是當我寫的代碼來獲得我遇到了以下錯誤特定記錄的詳細信息:在編寫Lambda表達式時出現MVC Proj錯誤

Unable to cast objec`t of type 'System.Data.Objects.ObjectQuery`1[MovieApp.Models.Movie]' to type 'MovieApp.Model`s.Movie'. 

這裏是我寫的獲取信息的代碼

public ActionResult Details(int id) 
{ 
    var moviedetail = (Movie)_entities.MovieSet.Where(mvid => mvid.Id == id); 
return View(moviedetail); 
} 

可以任何機構告訴我什麼是錯誤的,哪裏?

謝謝。

+0

凡返回一個,直到你做一個ToList不執行)的查詢(或類似的東西,你可以簡單地,如果你加入。首先()在結束... – 2010-05-05 14:38:08

回答

1

您的代碼中的問題是Where函數返回IEnumerable,並且您將它轉換爲Movie。因此它失敗了。檢查Where擴展函數的語法以查看自己。所以如果你確定你只會返回一個Movie對象,我建議你使用First()。

public ActionResult Details(int id) 
{ 
    var moviedetail = _entities.MovieSet.Where(mvid => mvid.Id == id).First(); 
    return View(moviedetail); 
} 
+0

100%完美答案! 感謝好友,這正是發生了什麼......我試着按照你說的,現在我的代碼運行平穩... 感謝一噸的答案! 保重 – Shrewdroid 2010-05-06 10:41:35

1

var moviedetail = (Movie)_entities.MovieSet.FirstOrDefault(mvid => mvid.Id == id);

Where用於返回一個列表,添加ToList(),你會擁有所有匹配您的ID,如果你的肯定只有一個項目,使用First,它將返回匹配的第一個項目FirstOrDefault將返回匹配的第一個項目,如果不匹配,則返回默認對象(可能爲null)。

+2

或單次(...)知道這將是唯一一個。 – 2010-05-05 12:24:03

+0

嗨夥計, 感謝您的幫助,但我已經嘗試了您上面提到的解決方案,並且我收到了此消息 (LINQ to Entities不支持「Single」方法,請考慮使用'First'方法。 這就是我使用WHERE屬性 任何線索的原因? – Shrewdroid 2010-05-05 12:43:57

0

我想,你從lambda表達式獲得一個集合。而你的觀點期待一個單一的電影對象。由於存在不匹配,它會拋出錯誤。只需使用Single()而不是Where()或使用First()。

var moviedetail =(Movie)_entities.MovieSet.Single(mvid => mvid.Id == id);

+0

嘿夥計, 感謝您的答案,但第一個或單個屬性將返回我的第一個或默認的單個對象。 在那裏,因爲我想要的對象匹配的ID,因此在哪裏條款... 任何其他線索,我可以嘗試? 謝謝 – Shrewdroid 2010-05-05 12:45:40