2009-05-05 5 views
14

पर linq में दूसरा रिकॉर्ड कैसे प्राप्त करें मेरे पास एक विनिमय दर तालिका है। मुझे वर्तमान दर और पिछली दर प्राप्त करने की आवश्यकता है और फिर परिणामों की तुलना करें।एसक्यूएल

मैं फर्स्टऑर्डडिल्ट का उपयोग करके पहला रिकॉर्ड प्राप्त कर सकता हूं।

जब मैं ElementAtOrDefault का उपयोग करता हूं, त्रुटि दिखाता है "क्वेरी ऑपरेटर 'ElementAtOrDefault' समर्थित नहीं है"। मैं दूसरा रिकॉर्ड कैसे प्राप्त कर सकता हूं?

उत्तर

31

आप इस कोशिश कर सकते हैं , फिर दूसरा तत्व चुनें।

3

आप का उपयोग करते हैं

.Take(2) 

आप पहले और दूसरे मिल जाएगा।

संपादित- आप की जरूरत है दोनों पहले और दूसरे, फिर ऊपर आपकी क्वेरी दो बार runing तुलना में अधिक कुशल हो जाएगा:

var query=data.Skip(1).Take(1); 
+2

या छोड़ें (1)। केवल (2) प्राप्त करने के लिए (2)। – Blorgbeard

1

करें शीर्ष 2:

.Take(1) 
.Skip(1).Take(1) 
5

लें() रिटर्न अशक्त अगर तत्व वहाँ नहीं है (ताकि FirstOrDefault के बराबर है())।

यदि आप बल्कि एक अपवाद फेंका था किया गया था (दूसरा तत्व वहाँ नहीं है क्योंकि) पहले की तरह() तो का उपयोग करें:, Skip(1).Take(1)FirstOrDefault एक Element रिटर्न:

Skip(1).Single() 
4

एक विस्तार नहीं स्पष्ट रूप से यहाँ उल्लेख नहीं है 1 तत्व का एक सेट देता है; यानी Skip(1).Take(1) द्वारा लौटाया गया प्रकार IEnumerable है, जबकि FirstOrDefault नहीं है।

3

इस सरल कार्यान्वयन की कोशिश करो इस संग्रह में दूसरा रिकॉर्ड लायेगा उपयोगी

var query= (from p in db.Person where p.Person == person_id select p); 
var firstResult = query.First(); 
var secondResult = query.Skip(1).Take(1).Single(); 
var thirdResult = query.Skip(2).Take(1).Single(); 
1
Collection.ElementAt(1) 

हो सकता है।