2013-02-22 16 views
6

मैं सी # और LINQ का उपयोग कर रहा है, मैं मैं शुरू की तारीख से एक सूची ऑर्डर करने के लिए, नवीनतम करने के लिए पहले से इस स्क्रिप्ट का उपयोग कर रहा प्रकार Dateलिंक में तिथियों का ऑर्डर कैसे करें?

फिलहाल में कुछ तिथि है।

निम्नलिखित कोड के साथ मेरी घटनाओं पृथक नहीं किया जा:

 events.OrderBy(x => x.DateTimeStart).ToList();  
     return events.AsQueryable(); 

यहाँ क्या गलत हो सकता है?

+1

याद रखें कि 'AsQueryable() 'और' ToList() 'अंतर्निहित डेटास्ट्रक्चर के आधार पर काफी अलग चीजें हैं। – flindeberg

उत्तर

4

events.OrderBy(x => x.DateTimeStart): एक प्रश्न है कि संपत्ति DateTimeStart द्वारा घटनाओं क्रमबद्ध करता घोषित। क्वेरी अभी तक नहीं की गई है।

events.OrderBy(x => x.DateTimeStart).ToList();: पिछली क्वेरी को संसाधित करें। सभी घटनाओं के माध्यम से Iterate, उनके डेटटाइमस्टार्ट की जांच करता है, उन्हें सूची के रूप में क्रमबद्ध करें और परिणाम ... परिणाम को छोड़ दें! क्योंकि आपने इसे सुरक्षित नहीं किया है। ऐसा ही कुछ के साथ तुलना करें:

int a = 0; 
a + 1; 
b = a; // b is 0 

return events.AsQueryable();: यहाँ आप अपने मूल घटनाओं बजाय क्रमबद्ध के लिए लौट रहे हैं।

आप इस प्रकार अपने कोड लिखना चाहिए:

return events.OrderBy(x => x.DateTimeStart).ToList().AsQueryable(); 

कि संस्करण क्रमबद्ध घटनाओं के स्थिर सूची प्रदान करेगी। यदि अब आप ईवेंट सूची बदलते हैं, तो परिणाम आपके परिवर्तनों को ध्यान में रखेगा।

दूसरा समाधान है:

return events.OrderBy(x => x.DateTimeStart).AsQueryable(); 

कि संस्करण कोई काम नहीं करेंगे। यह सिर्फ घटनाओं को सॉर्ट करने का तरीका बताता है और IQueryable के रूप में उस तरीके को लौटाता है। यदि आप भविष्य में कोड में लौटाए गए मान का उपयोग करते हैं तो इसमें हमेशा सभी सॉर्ट किए गए ईवेंट होंगे, भले ही आप इसका उपयोग करने से पहले नए जोड़ दें।

12

events.OrderBy(x => x.DateTimeStart).ToList() एक नई सूची बनाता है, और आप इसे वापस नहीं करते हैं।

आप शायद की तरह

return events.OrderBy(x => x.DateTimeStart).ToList(); 
+0

आपके उत्तरों के लिए धन्यवाद! – GibboK

2

दुकान एक चर में अपने orderedevents कुछ चाहते हैं और इस चर asQueryable वापसी();

var orderedEvents = events.OrderBy(x => x.DateTimeStart).ToList();  

return orderedEvents.AsQueryable(); 

या यदि आपको उस चर की आवश्यकता नहीं है तो सीधे अपने आदेशित ईवेंट लौटें।

return events.OrderBy(x => x.DateTimeStart).ToList().AsQueryable(); 
+0

उल्लेख करने लायक है कि ToList() LINQ अभिव्यक्ति का मूल्यांकन करेगा और परिणाम संग्रहित करेगा। उसके बाद, उस सूची के शीर्ष पर एक IQueryable लौटने का कोई उपयोग नहीं है। – publicgk

+0

हाँ आप सही हैं। मैं केवल अपना अद्यतन कोड प्रदान कर रहा हूं।मुझे यह कारण नहीं पता कि वह इसे क्यों निष्पादन योग्य(); – Jehof

+1

शायद वह जो चाहता था वह कुछ ऐसा है: 'वापसी की घटनाएं। ऑर्डरबी (x => x.DateTimeStart) .अनुक्रम योग्य(); ' – publicgk

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