LINQ Order โดยการสอบถามจากมากไปน้อย


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();

แต่นี่ทำให้เกิดข้อผิดพลาด:

ไม่มีการโอเวอร์โหลดสำหรับเมธอด 'OrderByDescending' ที่รับ 0 อาร์กิวเมนต์

จากสิ่งที่ฉันอ่านฉันค่อนข้างแน่ใจว่าวิธีแรกที่ฉันทำมันควรจะใช้ได้ ฉันได้ลองเปลี่ยนจากมากไปน้อยเป็นน้อยไปหามากเพื่อดูว่ามันทำอะไร แต่มันยังคงเหมือนเดิม

ฉันจะขอบคุณถ้ามีคนสามารถดูคำถามและดูว่าฉันทำอะไรผิด ขอบคุณ :)

คำตอบ:


674

คุณต้องเลือกคุณสมบัติเพื่อจัดเรียงและส่งผ่านเป็นนิพจน์แลมบ์ดา OrderByDescending

ชอบ:

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

จริง ๆ แล้วแม้ว่าเวอร์ชันแรกของคำสั่ง LINQ ของคุณควรใช้งานได้ เป็นt.Delivery.SubmissionDateประชากรจริงกับวันที่ถูกต้อง?


2
สวัสดี optus ขอบคุณสำหรับการตอบกลับของคุณ ฉันพบปัญหานี้แล้ว ฉันใช้ paginatedList และจริง ๆ แล้วมันเป็นการสั่งซื้อจากคลาสผู้ช่วย ฉันจะทำเครื่องหมายคำตอบของคุณว่าถูกต้องเมื่อถึงเวลาที่กำหนดขึ้น :)
109221793

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 <Items> (i => i.Delivery); ctn.LoadOptions = dlo;
mrosiak

29

ฉันคิดว่าอันที่สองควรเป็น

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

ฉันคิดว่ายุติธรรมกับเขาฉันพิมพ์คำถามที่ไม่ถูกต้องเมื่อฉันโพสต์ (เช่นออกจากบรรทัดคำสั่งสุดท้ายที่สอง) และเขาอาจคัดลอกและวางเพื่อแสดงการใช้แลมบ์ดา OrderByDescending
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);
}

วิธีการนั้นใช้ได้ แต่ถ้าคุณต้องการให้เป็น List Object:

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

สิ่งที่คุณต้องทำคือเพิ่มการเรียก. ToList () ต่อท้าย Query

มีบางอย่างที่ต้องจำไว้ซึ่งอยู่ด้านบนของหัวของฉันฉันจำไม่ได้ว่านิพจน์! (ไม่ใช่) เป็นที่ยอมรับในการโทร Where ()

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.