LINQ क्वेरी शीर्ष पांच का चयन करने के लिए


240

मेरे पास एक LINQ क्वेरी है:

var list = from t in ctn.Items
           where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
           orderby t.Delivery.SubmissionDate
           select t;

मैं डेटाबेस से सिर्फ पांच परिणामों का चयन करने के लिए इस क्वेरी को कैसे संशोधित कर सकता हूं?


लो (how_many_you_wish)
snr

जवाबों:


449
var list = (from t in ctn.Items
           where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
           orderby t.Delivery.SubmissionDate
           select t).Take(5);

5
+1, लेकिन गाह, कोष्ठक में बहुस्तरीय भावों को लपेटना और फिर पूरी तरह से डी-रेफरेंस करना वास्तव में मुझे किसी कारण से परेशान करता है।
डॉक्टर जोन्स

7
ऐसा लगता है कि डेटाबेस से उतने ही परिणाम मिलते हैं जितने की समानता की स्थितियों से मेल खाते हैं, और डेटाबेस से लिए जाने के बाद ही यह आवेदन के भीतर ले (5) प्रतिबंध लागू करता है। क्या takeडेटाबेस से शाब्दिक रूप से केवल पहली 5 पंक्तियों का कोई रास्ता है ?
जेएम हिक्स

6
@JMHicks वास्तव में नहीं। टेक (5) कमांड केवल IQueryable के लिए एक और शर्त जोड़ रहा है, जो तब तक निष्पादित नहीं करेगा जब तक आप इसे गणना नहीं करते। हालांकि, LINQ प्रदाता हो सकते हैं जो टेक ऑपरेशन का समर्थन नहीं करते हैं।
ब्रूनो ब्रांट

1
@JMHicks - ऐसा नहीं है कि लिनक काम करता है ... लिनक आलसी है।
होगन


21

यह लिनक के लैम्ब्डा आधारित दृष्टिकोण का उपयोग करके भी प्राप्त किया जा सकता है;

var list = ctn.Items
.Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null)
.OrderBy(t => t.Delivery.SubmissionDate)
.Take(5);

9

[ @ अंजनी द्वारा प्रदान किए गए उत्तर की तुलना में कुछ अधिक वर्णनात्मक उत्तर देना ।]

यह LINQ धाराप्रवाह सिंटैक्स का उपयोग करके भी प्राप्त किया जा सकता है :

var list = ctn.Items
    .Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null)
    .OrderBy(t => t.Delivery.SubmissionDate)
    .Take(5);

ध्यान दें कि प्रत्येक विधि ( Where, OrderBy, Take) इस LINQ बयान में प्रकट होता है एक लेता है कि लैम्ब्डा अभिव्यक्ति एक तर्क के रूप। यह भी ध्यान दें कि के लिए प्रलेखन के Enumerable.Takeसाथ शुरू होता है:

अनुक्रम की शुरुआत से निर्दिष्ट तत्वों की संख्या निर्दिष्ट करता है।


5

Additional information

कभी-कभी किसी मॉडल को एक दृश्य मॉडल में बांधना और एक प्रकार की रूपांतरण त्रुटि देना आवश्यक है । इस स्थिति में आपको ToList()विधि का उपयोग करना चाहिए ।

var list = (from t in ctn.Items
       where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
       orderby t.Delivery.SubmissionDate
       select t).Take(5).ToList();

0

बस आपको लगता है कि आप अनुक्रम से अपरिचित महसूस कर सकते हैं-> कहां-> का चयन करें, जैसा कि sql स्क्रिप्ट में है, यह Select-> From-> जहां की तरह है।

लेकिन आप यह नहीं जानते होंगे कि Sql Engine के अंदर, यह ' From-> Where-> Select ' के अनुक्रम में भी पार्स है , इसे मान्य करने के लिए, आप एक साधारण स्क्रिप्ट आज़मा सकते हैं

select id as i from table where i=3

और यह काम नहीं करेगा, कारण यह है कि इंजन चयन के पहले कहां पार्स होगा , इसलिए यह पता नहीं होगा कि मैं कहां पर हूं । इस काम को करने के लिए, आप कोशिश कर सकते हैं

select * from (select id as i from table) as t where i = 3
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.