2010-05-30 9 views
7

मैं एक क्वेरी के परिणामों लेने की जरूरत: इतना है कि मैं इस पल मैं एक बनाने पर की तरहपरिवर्तित LINQ क्वेरी ICollection को

ICollection<SoilSamplingSubJob> subjobs 

कुछ हो सकता है

var query = from m in db.SoilSamplingSubJobs where m.order_id == id select m; 

और एक ICollection के रूप में तैयार सूची है, जो मेरी जरूरतों के लिए उपयुक्त नहीं है:

query.ToList(); 

मैं क्या करते हैं - यह query.ToIcollection है()?

+1

'asp.net-mvc' के साथ इस सवाल टैगिंग के लिए कोई विशेष कारण? –

उत्तर

14

सूची एक आईसीओलेक्शन है। आप निम्नलिखित क्वेरी को बदल सकते हैं। निम्नलिखित सूची() कोड।

query.ToList() as ICollection<SoilSamplingSubJob>; 

आप सवाल करते हैं कि इस क्वेरी को फ़ंक्शन परिणाम के रूप में वापस कर दिया गया है। यदि ऐसा मामला याद है कि लिंक से SQL ऑब्जेक्ट्स डिफ़ॉल्ट रूप से जुड़े होते हैं, तो आपको प्रबंधित करना होगा कि आपका डेटाबेस संदर्भ कहां खोला और बंद हो। वैकल्पिक रूप से आप डीटीओ (डेटा ट्रांसफर ऑब्जेक्ट्स) बना सकते हैं जो आपके शेष प्रोग्राम में उपयोग किए जाने वाले डेटा को पकड़ सकें। ये वस्तुएं आपके ऑब्जेक्ट पदानुक्रम में किसी भी तरह से फिट हो सकती हैं।

आप क्वेरी के हिस्से के रूप में इन डीटीओ भी बना सकते हैं।

var query = from m in db.SoilSamplingSubJobs where m.order_id == id 
      select new SubJobDTO { 
       OrderNumber = m.order_id 
      }; 
return query.ToList() as ICollection<SubJobDTO>; 
+0

धन्यवाद जेसन! बहुत आभारी – bergin

0

चूंकि क्वेरी IENumerable लागू करती है, तो आप इसे अपनी पसंद के संग्रह के निर्माता को पास कर सकते हैं। आईसीओलेक्शन एक इंटरफ़ेस है, जो विभिन्न प्रदर्शन विशेषताओं के साथ कई वर्गों (List<T>, जो टोलिस्ट रिटर्न सहित) द्वारा कार्यान्वित किया गया है।

0
थोड़ा अलग वाक्य रचना के साथ

, तो आप इस तरह कुछ कर सकते हैं और साथ ही है कि क्या ICollection में चला जाता है में कटौती कर सकते हैं। आप एक विशाल तालिका है, लेकिन केवल cshtml पेज में कुछ रंगमंच की सामग्री लोड करना चाहते हैं जब दृष्टिकोण के इस प्रकार के कोणीय और MVC के लिए अच्छा है:

ICollection<SoilSamplingSubJob> samples = dbContext.GetQuery().Where(m => m.order_id == id) 
.AsEnumerable().Select(s => new 
      { 
       Id = s.order_id, 
       CustomProperty = s.some_thing 
      }).ToList() as ICollection<SoilSamplingSubJob>