2012-03-08 107 views
5

這是從我的控制器的代碼片段無法投射型的「WhereListIterator`1 [Web.Model.Appointment]」爲類型「Web.Model.Appointment」對象

[HttpPost] 
public ActionResult Cancel(string id,FormCollection collection) 
{ 
    //This is how I would like to declare appt but I cannot seem to correctly pass id into this method 
    //var appt = Application.Session.GetObjectFromOid<Appointment>(new ObjectId(id)); 

    //I am trying to do it this way instead but I get an error 
    var appt = (Appointment)Application.Appointments.Where(a=>a.Id.Equals(collection["Id"])); 
    ..... 
} 

這是錯誤我得到:無法投射類型'WhereListIterator`1 [Web.Model.Appointment]'的對象來鍵入'Web.Model.Appointment'。

這是我的看法:

<input type="button" value="Save" onclick="updateCancel(); return false;" /><button>Save</button> 

,這是我的功能

function updateCancel() { 
    $('#cancel').ajaxSubmit({ 

    }); 
    } 

那麼,爲什麼我收到此錯誤? 或者是否有一種方法可以將Model.Data.Id傳遞到我的函數中,以便我可以直接使用id?

回答

1

這就是我最終使用和它的工作。

var appt = Application.Session.GetObjectFromOid<Appointment>(new ObjectId(id)); 
12

Where子句返回一個迭代器。選擇你想要使用的東西。即,如果您只希望獲得一個結果,則可以使用FirstOrDefault。您也可以使用索引,如[1]

var appt = (Appointment)Application.Appointments.Where 
    (a=>a.Id.Equals(collection["Id"])) 
    .FirstOrDefault(); 

注意FirstOrDefault回報null時沒有找到的項目,所以一定要檢查的結果值。 PS:你可能不需要你在那裏演員。如果沒有(Appointment,從標題中的錯誤中,這應該是正常的,因爲列表中的項目類型爲Appointment

0

一件事與LINQ運營商合作時,要記住 - 返回零個或多個元素,反正的那些 - 是他們返回可分配給IEnumerable的對象。

  • 如果你期待一個單一的元素,或者你需要追加另一個LINQ操作符。 Single和SingleOrDefault都返回單個結果。當有超過1場比賽時,這些會引發異常。

  • First和FirstOrDefault LINQ運算符也返回一個單獨的元素,如果有超過1個匹配的拋出異常的insead,它們只返回找到的第一個元素。

在任何一種情況下,如果找不到匹配,「OrDefault」運算符返回null,但另外兩個拋出異常。

相關問題