2012-06-04 13 views
36

से किसी सूची में लौटाए गए परिणामों की सीमा सीमित करें मैं डेटाबेस से कुछ परिणाम खींचने के लिए लिंक/ईएफ 4.1 का उपयोग कर रहा हूं और परिणामों को (एक्स) हाल के परिणामों तक सीमित करना चाहता हूं। जहां एक्स उपयोगकर्ता द्वारा निर्धारित एक संख्या है।लिंक

क्या ऐसा करने का कोई तरीका है?

मैं वर्तमान में उन्हें List के रूप में वापस भेज रहा हूं यदि यह परिणाम सेट को सीमित करने में मदद करेगा। जब तक मैं एक्स को हिट नहीं करता तब तक मैं इसे लूपिंग से सीमित कर सकता हूं, मैं बस अतिरिक्त डेटा पास नहीं कर सकता।

बस अगर यह प्रासंगिक है ... सी # एमवीसी 3 परियोजना SQL सर्वर डेटाबेस से चल रही है।

+3

क्या आप linq "take (100)" के लिए पूछ रहे हैं? – daryal

उत्तर

69

listOfItems मान लिया जाये कि Take समारोह

int numberOfrecords=10; // read from user 
listOfItems.OrderByDescending(x => x.CreatedDate).Take(numberOfrecords) 

का प्रयोग कर अपनी इकाई वस्तुओं की सूची है और CreatedDate एक क्षेत्र है जो तारीख बनाई मूल्य (यहां इस्तेमाल हाल ही में आइटम प्राप्त करने उतरते द्वारा आदेश करने के लिए) है।

ले लो() फ़ंक्शन अनुक्रम की शुरुआत से एक निर्दिष्ट संख्या में संगत तत्व लौटाता है।

http://msdn.microsoft.com/en-us/library/bb503062.aspx

+1

"सबसे हालिया परिणाम" - जो आपके उत्तर द्वारा संबोधित नहीं है। –

+0

@ श्रीमती: आह! मुझे वह हिस्सा याद आया। अभी अपडेट किया गया इंगित करने के लिए धन्यवाद। – Shyju

+1

जबकि मुझे वास्तव में सबसे हाल के हिस्से में मदद की ज़रूरत नहीं थी (मैंने सवाल को खराब तरीके से कहा) लेना मुझे चाहिए! धन्यवाद! – Jared

17
results = results.OrderByDescending(x=>x.Date).Take(10); 

OrderByDescending अपने दिनांक/समय संपत्ति द्वारा आइटम (या w/ई तर्क आप सबसे हाल ही में प्राप्त करने के लिए उपयोग करना चाहते हैं) और पहली एक्स आइटम के लिए सीमित कर देगा ले लो (प्रथम सॉर्ट जाएगा सबसे हालिया होने के कारण, ऑर्डर करने के लिए धन्यवाद)।

संपादित करें: कुछ पंक्तियों पहली पंक्ति पर शुरू नहीं लौटने के लिए, Skip() का उपयोग करें:

results = results.OrderByDescending(x=>x.Date).Skip(50).Take(10); 
+1

क्या कुछ इंडेक्स से शुरू होने वाले परिणाम लेना संभव है? उदाहरण के लिए, एक सौ परिणाम - इंडेक्स 50 के साथ शुरू करें, 50 से 60 तक 10 परिणाम लें? – FrenkyB

+2

@FrenkyB कृपया उत्तर देखें - मैंने इसे आपके अनुवर्ती पते के लिए अपडेट किया है। –

+0

अद्भुत, बहुत बहुत धन्यवाद :) – FrenkyB

10

उपयोग Take(), एक सूची के लिए परिवर्तित करने से पहले। इस तरह ईएफ उस क्वेरी को अनुकूलित कर सकता है जो इसे बनाता है और केवल आपको आवश्यक डेटा लौटाता है।

+1

क्या आप कृपया अधिक विस्तृत करें। शायद एक उदाहरण के साथ? –

+1

@ डब्ल्यूएम। पहले ले जाने से ईएफ को SQL क्वेरी में पेजिंग दाएं करने की अनुमति मिल जाएगी। यदि आप पहले इसके बजाय ToList करते हैं, तो सभी परिणाम SQL से वापस खींचे जाएंगे, और पेजिंग को स्मृति में किया जाएगा। – RedFilter