LINQ ऑर्डरबी अवरोही क्वेरी


439

मुझे यकीन है कि यह अपेक्षाकृत सरल होगा।

मेरे पास एक LINQ क्वेरी है जिसे मैं हाल ही में बनाई गई तारीख से ऑर्डर करना चाहता हूं।

देख:

        var itemList = from t in ctn.Items
                        where !t.Items && t.DeliverySelection
                        orderby t.Delivery.SubmissionDate descending
                        select t;

मैंने भी कोशिश की है:

       var itemList = (from t in ctn.Items
                        where !t.Items && t.DeliverySelection
                        select t).OrderByDescending();

लेकिन यह एक त्रुटि देता है:

'ऑर्डरबायस्केंडिंग' पद्धति के लिए कोई अधिभार 0 तर्क नहीं लेता है

मैंने जो पढ़ा है, उससे मुझे पूरा यकीन है कि मैंने जो काम किया है, वह पहला तरीका है। मैंने आरोही को सिर्फ यह देखने के लिए उकसाया है कि यह कुछ भी करता है, लेकिन यह वही रहता है।

मैं आभारी रहूँगा अगर कोई क्वेरी पर एक नज़र डाल सकता है और देख सकता है कि क्या मैं कुछ गलत कर रहा हूँ। धन्यवाद :)

जवाबों:


674

आपको एक छांटने के लिए एक संपत्ति चुनने और उसे लंबोदर अभिव्यक्ति के रूप में पारित करने की आवश्यकता है OrderByDescending

पसंद:

.OrderByDescending(x => x.Delivery.SubmissionDate);

वास्तव में, हालांकि आपके LINQ स्टेटमेंट का पहला संस्करण काम करना चाहिए। क्या t.Delivery.SubmissionDateवास्तव में वैध तिथियों के साथ आबादी है?


2
हाय ऑप्टस, आपके उत्तर के लिए धन्यवाद। मुझे पता चला है कि समस्या क्या थी। मैं एक पेजलिस्ट का उपयोग कर रहा था, और यह वास्तव में उस सहायक वर्ग से आदेश देने का काम कर रहा था। समय सीमा
बढ़ने पर

175

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

var itemList = from t in ctn.Items.Include(x=>x.Delivery)
                    where !t.Items && t.DeliverySelection
                    orderby t.Delivery.SubmissionDate descending
                    select t;

शामिल DataLoadOptions के बराबर है dlo = नया DataLoadOptions (); dlo.LoadWith <आइटम> (i => i.Delivery); ctn.LoadOptions = dlo;
मृसिक

29

मुझे लगता है कि दूसरा होना चाहिए

var itemList = (from t in ctn.Items
                where !t.Items && t.DeliverySelection
                select t).OrderByDescending(c => c.Delivery.SubmissionDate);

मुझे लगता है कि उसके प्रति निष्पक्ष होना, मैंने पोस्ट करते समय क्वेरी गलत लिखी थी (यानी दूसरे अंतिम क्रम रेखा में छोड़ना) और वह शायद सिर्फ कॉपी की गई और लंबोर्ड ऑर्डरबायडिंग के उपयोग को प्रदर्शित करने के लिए चिपकाया गया।
109221793

6

बस इसे एक अलग प्रारूप में दिखाने के लिए जिसे मैं किसी कारण से उपयोग करना पसंद करता हूं: पहला तरीका आपके आइटम को एक System.Linq.IOrderedQueryable के रूप में लौटाता है

using(var context = new ItemEntities())
{
    var itemList = context.Items.Where(x => !x.Items && x.DeliverySelection)
                                .OrderByDescending(x => x.Delivery.SubmissionDate);
}

यह दृष्टिकोण ठीक है, लेकिन यदि आप इसे सीधे सूची वस्तु में चाहते हैं:

var itemList = context.Items.Where(x => !x.Items && x.DeliverySelection)
                                .OrderByDescending(x => x.Delivery.SubmissionDate).ToList();

आपको बस इतना करना है कि एक .ToList () क्वेरी के अंत में कॉल करें।

नोट करने के लिए कुछ, मेरे सिर के ऊपर से मैं याद नहीं कर सकता कि क्या (-) अभिव्यक्ति कहाँ () कॉल में स्वीकार्य है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.