2012-03-08 17 views
5

यह मेरा नियंत्रक के कोड का टुकड़ा है असमर्थ'[Web.Model.Appointment] WhereListIterator`1' '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"])); 
    ..... 
} 

यह त्रुटि है कि मुझे मिलता है: 'Web.Model.Appointment' टाइप करने के लिए 'WhereListIterator`1 [Web.Model.Appointment]' प्रकार का ऑब्जेक्ट डालने में असमर्थ।

यह मेरे विचार है:

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

और यह मेरा समारोह

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

    }); 
    } 

है तो क्यों मैं इस त्रुटि मिल रहा है? या क्या मेरे फ़ंक्शन में Model.Data.Id को पास करने का कोई तरीका है ताकि मैं इसके बजाय आईडी का उपयोग कर सकूं?

उत्तर

1

यही वह है जिसका मैंने उपयोग समाप्त किया और यह काम किया।

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

कहां क्लॉज एक पुनरावर्तक देता है। चुनें कि आप इसके बजाय क्या उपयोग करना चाहते हैं। यानी, यदि आप केवल एक परिणाम की उम्मीद करते हैं, तो आप FirstOrDefault का उपयोग कर सकते हैं। आप [1] जैसे इंडेक्स का भी उपयोग कर सकते हैं।

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

ध्यान दें कि FirstOrDefault रिटर्न null जब आइटम नहीं मिला है, इसलिए परिणाम मान की जाँच कर लें।

पीएस: आपको शायद वहां अपनी कास्ट की आवश्यकता नहीं है। (Appointment के बिना, आपके शीर्षक में त्रुटि से, यह केवल काम करना चाहिए, क्योंकि सूची में आइटम Appointment प्रकार हैं।

0

एक बात जब LINQ ऑपरेटरों के साथ काम करने को ध्यान में रखना - जो कि शून्य या अधिक तत्वों लौटने के लिए, वैसे भी - कि वे एक उद्देश्य यह है कि IEnumerable को सौंपा जा सकता वापसी है।

  • यदि आप एक तत्व की अपेक्षा कर रहे हैं, तो आपको एक और LINQ ऑपरेटर जोड़ना होगा। सिंगल और सिंगलऑर्डफॉल्ट दोनों एक एकल परिणाम लौटाते हैं। 1 से अधिक मैच होने पर ये फेंक अपवाद होते हैं।

  • पहला और फर्स्टऑर्डफॉल्ट LINQ ऑपरेटर भी एक तत्व को वापस लौटाता है, केवल 1 मैच से अधिक होने पर अपवाद फेंकने की असमानता, वे केवल पहले पाए गए पहले को वापस लौटते हैं।

किसी भी मामले में यदि कोई मिलान नहीं मिलता है तो "OrDefault" ऑपरेटर शून्य हो जाते हैं, लेकिन अन्य दो अपवाद फेंक देते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे