Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Salah satu manfaat terpenting dari LINQ (dan LINQ ke XML) adalah bahwa kueri berantai dapat berfungsi sebaik satu kueri yang lebih besar dan lebih rumit daripada kueri berantai.
Kueri berantai adalah kueri yang menggunakan kueri lain sebagai sumbernya. Misalnya, dalam kode sederhana berikut, query2
memiliki query1
sebagai sumbernya:
XElement root = new XElement("Root",
new XElement("Child", 1),
new XElement("Child", 2),
new XElement("Child", 3),
new XElement("Child", 4)
);
var query1 = from x in root.Elements("Child")
where (int)x >= 3
select x;
var query2 = from e in query1
where (int)e % 2 == 0
select e;
foreach (var i in query2)
Console.WriteLine("{0}", (int)i);
Dim root As New XElement("Root", New XElement("Child", 1), New XElement("Child", 2), New XElement("Child", 3), New XElement("Child", 4))
Dim query1 = From x In root.Elements("Child") Where CInt(x) >= 3x
Dim query2 = From e In query1 Where CInt(e) Mod 2 = 0e
For Each i As var In query2
Console.WriteLine("{0}", CInt(i))
Next
Contoh ini menghasilkan output berikut:
4
Kueri berantai ini menyediakan profil performa yang sama dengan iterasi melalui daftar tertaut.
- Sumbu Elements pada dasarnya memiliki kinerja yang setara dengan iterasi pada daftar tertaut. Elements diimplementasikan sebagai iterator dengan eksekusi yang ditangguhkan. Ini berarti bahwa ia melakukan beberapa pekerjaan selain melakukan iterasi melalui daftar yang ditautkan, seperti mengalokasikan objek iterator dan melacak status eksekusi. Pekerjaan ini dapat dibagi menjadi dua kategori: pekerjaan yang dilakukan pada saat iterator disiapkan, dan pekerjaan yang dilakukan selama setiap perulangan. Pekerjaan penyiapan adalah sejumlah kecil pekerjaan tetap dan pekerjaan yang dilakukan selama setiap iterasi sebanding dengan jumlah item dalam koleksi sumber.
- Dalam
query1
, klausawhere
(Where
di Visual Basic) menyebabkan kueri memanggil metode Where. Metode ini juga diimplementasikan sebagai iterator. Pekerjaan penyiapan terdiri dari membuat instans delegasi yang akan mereferensikan ekspresi lambda, ditambah pengaturan normal untuk iterator. Dengan setiap iterasi, delegasi dipanggil untuk menjalankan predikat. Pekerjaan penyiapan dan pekerjaan yang dilakukan selama setiap iterasi mirip dengan pekerjaan yang dilakukan saat melakukan iterasi melalui sumbu. - Di
query1
, klausa select menyebabkan kueri memanggil metode Select. Metode ini memiliki profil performa yang sama dengan Where metode . - Dalam
query2
, baikwhere
klausa (Where
dalam Visual Basic) danselect
klausa memiliki profil performa yang sama seperti diquery1
.
Oleh karena itu iterasi melalui query2
berbanding lurus dengan jumlah item dalam sumber kueri pertama, dengan kata lain, waktu linier.
Untuk informasi selengkapnya tentang iterator, lihat hasil.
Untuk tutorial yang lebih rinci tentang menggabungkan kueri, lihat Tutorial: Menggabungkan Kueri (C#).