Saya memiliki LINQ query:
var list = from t in ctn.Items
where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
orderby t.Delivery.SubmissionDate
select t;
Bagaimana saya bisa memodifikasi query ini untuk memilih hanya lima hasil dari database?
Hal ini juga dapat dicapai dengan menggunakan Lambda dengan pendekatan berbasis Linq;
var list = ctn.Items
.Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null)
.OrderBy(t => t.Delivery.SubmissionDate)
.Take(5);
[Terletak agak lebih deskriptif jawaban dari jawaban yang disediakan oleh @Ajni.]
Hal ini juga dapat dicapai dengan menggunakan LINQ fasih sintaks:
var list = ctn.Items
.Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null)
.OrderBy(t => t.Delivery.SubmissionDate)
.Take(5);
Perhatikan bahwa masing-masing metode (Mana
, OrderBy
, Ambil
) yang muncul dalam pernyataan LINQ mengambil lambda expression sebagai argumen. Juga perhatikan bahwa dokumentasi untuk Enumerable.Mengambil
dimulai dengan:
Kembali jumlah tertentu elemen bersebelahan dari awal urutan.
Informasi tambahan
Kadang-kadang hal ini diperlukan untuk mengikat model ke view model dan konversi tipe kesalahan. Dalam situasi ini anda harus menggunakan Kedaftar()
metode.
var list = (from t in ctn.Items
where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
orderby t.Delivery.SubmissionDate
select t).Take(5).ToList();
Hanya berpikir anda mungkin akan merasa asing urutan Dari->di Mana->Pilih, seperti di sql script, itu seperti Pilih->Dari->di Mana.
Tapi anda mungkin tidak tahu bahwa di dalam Sql Engine, hal ini juga mengurai di urutan 'Dari->di Mana->Pilih', Untuk memvalidasi itu, anda dapat mencoba script sederhana
select id as i from table where i=3
dan itu tidak akan bekerja, alasannya adalah mesin akan mengurai Dimana sebelum Pilih, sehingga tidak't tahu alias saya di *mana***. Untuk membuat ini bekerja, anda dapat mencoba
select * from (select id as i from table) as t where i = 3