LINQ Orderby Descending Query

439

Saya yakin ini akan menjadi yang relatif sederhana.

Saya memiliki permintaan LINQ yang ingin saya pesan pada tanggal terbaru dibuat.

Lihat:

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

Saya juga sudah mencoba:

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

tapi ini memberikan kesalahan:

Tidak ada kelebihan untuk metode 'OrderByDescending' membutuhkan 0 argumen

Dari apa yang saya baca, saya cukup yakin cara pertama saya melakukannya harus bekerja. Saya sudah mencoba mengubah turun ke naik hanya untuk melihat apakah ia melakukan sesuatu tetapi tetap sama.

Saya akan berterima kasih jika seseorang dapat melihat kueri dan melihat apakah saya melakukan kesalahan. Terima kasih :)

109221793
sumber

Jawaban:

674

Anda harus memilih Properti untuk disortir dan mengirimkannya sebagai ekspresi lambda OrderByDescending

Suka:

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

Sungguh, meskipun versi pertama dari pernyataan LINQ Anda harus bekerja. Apakah t.Delivery.SubmissionDatesebenarnya diisi dengan tanggal yang valid?

Adam Price
sumber
2
Hai Optus, terima kasih atas balasan Anda. Saya sudah tahu apa masalahnya. Saya menggunakan paginatedList, dan itu benar-benar melakukan pemesanan dari kelas pembantu itu. Saya akan menandai jawaban Anda sebagai benar setelah batas waktu habis :)
109221793
175

Saya pikir ini pertama gagal karena Anda memesan nilai yang nol. Jika Pengiriman adalah tabel terkait kunci asing maka Anda harus memasukkan tabel ini terlebih dahulu, contoh di bawah ini:

var itemList = from t in ctn.Items.Include(x=>x.Delivery)
                    where !t.Items && t.DeliverySelection
                    orderby t.Delivery.SubmissionDate descending
                    select t;
mrosiak
sumber
termasuk setara dengan DataLoadOptions dlo = DataLoadOptions baru (); dlo.LoadWith <Items> (i => i.Delivery); ctn.LoadOptions = dlo;
mrosiak
29

Saya pikir yang kedua seharusnya

var itemList = (from t in ctn.Items
                where !t.Items && t.DeliverySelection
                select t).OrderByDescending(c => c.Delivery.SubmissionDate);
Jonathan
sumber
Saya pikir untuk bersikap adil kepadanya, saya salah mengetik kueri ketika saya memposting (mis. Meninggalkan di baris orderby kedua terakhir) dan dia mungkin hanya menyalin dan menempel untuk menunjukkan penggunaan lambda OrderByDescending.
109221793
6

Hanya untuk menunjukkannya dalam format berbeda yang saya lebih suka gunakan untuk beberapa alasan: Cara pertama mengembalikan itemList Anda sebagai System.Linq.IOrderedQueryable

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

Pendekatan itu baik-baik saja, tetapi jika Anda ingin langsung ke Objek Daftar:

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

Yang harus Anda lakukan adalah menambahkan panggilan .ToList () ke akhir Query.

Sesuatu yang perlu diperhatikan, dari atas kepala saya, saya tidak dapat mengingat jika ekspresi! (Tidak) dapat diterima dalam panggilan Where ().

nulltron
sumber