2013-03-27 4 views
11
Context db = new Context(); 
List<Invoice> invoice = 
(from LocalInvoice in db.Invoices 
where LocalInvoice.Site_Id == this.SiteIdentifier 
select LocalInvoice).ToList(); 

रिकॉर्ड्स की एक सूची देता है। मैं सूची में अंतिम का चयन करना चाहता हूं। मैंने .ToList().LastOrDefault(); को आजमाया है, लेकिन त्रुटि प्राप्त करने में त्रुटि 'चालान' को 'System.Collections.Generic.List' में परिवर्तित नहीं किया जा सकता है।LINQ सूची

यह क्यों कह रहा है यह एक सूची List<Invoice> invoice

बहुत सराहना किसी भी मदद के रूप में मैं नहीं घोषित चालान किया है। टा


संपादित जबाब हर किसी को मैं कोशिश की है कि आप सभी के लिए क्या सलाह दी है और हर बार im त्रुटि रहने के लिए धन्यवाद: क्वेरी ऑपरेटर 'LastOrDefault' समर्थित नहीं है।

भी मैंने वास्तव में समझाया कि मैं समग्र रूप से क्या करने की कोशिश कर रहा हूं जो समस्या पैदा कर सकता है। मेरे पास एक सारणी है जिसमें सभी चालान शामिल हैं, प्रत्येक एक अलग 'आईडी' के साथ। हालांकि प्रत्येक रिकॉर्ड में साइटइडेन्टिफायर कॉलम होगा जो विभिन्न चालानों के लिए कई बार उपयोग किया जाता है। इसलिए प्रत्येक साइट में कई चालान हो सकते हैं।

साइट के लिए सबसे हालिया चालान प्राप्त करने का प्रयास कर रहा है। तो कहते हैं कि चालान

id SiteIdentifier 
73 25 
74 25 
75 25 

मैं सभी रिकॉर्ड जो चालान आईडी beeing है | जहां SiteIdentifier == this.SiteIdentifier (eg25), तो हाल ही में रिकॉर्ड मिल पाने के लिए प्रयास किया गया था 75

क्या किसी के भी पास कोई सुझाव है? सभी मदद के लिए फिर से धन्यवाद

उत्तर

23

LastOrDefault एक भी तत्व वापस आ जाएगी। आपको पहले फ़िल्टर को लागू किए बिना ToList को कॉल नहीं करना चाहिए, यह आपको केवल एक की आवश्यकता होने पर डेटाबेस से सभी पंक्तियों को पुनर्प्राप्त करेगा।

var invoice = db.Invoices.LastOrDefault(s => s.Site_Id == this.SiteIdentifier); 

यदि आप एक रिलेशनल टेबल से पूछताछ कर रहे हैं तो आपको ऑर्डरिंग भी लागू करनी होगी। LastOrDefault केवल स्मृति संग्रह के साथ सार्थक है। ऐसा लगता है कि यह ईएफ में समर्थित नहीं है और अपवाद फेंक देगा।

var invoice = db.Invoices.OrderByDescending(s => s.Id) 
         .FirstOrDefault(s => s.Site_Id == this.SiteIdentifier); 
+0

धन्यवाद उत्तर के लिए कृपया संपादित – John

+0

देख @ जॉन मेरी दूसरी उदाहरण पढ़ें देखते हैं। यह काम करना चाहिए। –

+0

दूसरा उदाहरण काम करता है लेकिन केवल पहले या डिफ़ॉल्ट के लिए। मुझे डर है कि मुझे विशेष रूप से डीबी में सबसे हालिया रिकॉर्ड की आवश्यकता है। ।आखिरकार एक त्रुटि फेंक रहा है क्वेरी ऑपरेटर 'लास्ट' समर्थित नहीं है।, और lastordefault मेरी मूल पोस्ट में मूल त्रुटि के समान है। क्या आपके पास कोई विचार है? – John

5

LastOrDefault एक चालान का एक उदाहरण वापस नहीं करेगा, संग्रह नहीं, इसलिए परिवर्तनीय प्रकार को बदलें।

Invoice invoice = 
    (from LocalInvoice in db.Invoices 
    where LocalInvoice.Site_Id == this.SiteIdentifier 
    select LocalInvoice).LastOrDefault(); 

या क्लीनर अभी भी:

var invoice = db.Invoices.LastOrDefault(i => i.Site_Id == this.SiteIdentifier); 
+0

धन्यवाद उत्तर के लिए कृपया संपादित – John

0

LastOrDefault एक भी तत्व है, List वापस आ जाएगी:

बेस्ट समाधान आदेश उलटा और FirstOrDefault विधि का उपयोग करने के लिए है। यह काम करेगा:

Invoice invoice = 
    (from LocalInvoice in db.Invoices 
    where LocalInvoice.Site_Id == this.SiteIdentifier 
    select LocalInvoice) 
    .LastOrDefault(); 
+0

वास्तव में अक्षम! सभी रिकॉर्ड्स के लिए डेटाबेस क्वेरी करेगा और डेटाबेस पर नहीं, आवेदन पर आखिरी बार ले जाएगा। – MarcinJuraszek

+0

उत्तर के लिए धन्यवाद कृपया संपादित करें देखें – John

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