Bagikan melalui


Klasifikasi operator kueri standar dengan cara eksekusi (Visual Basic)

Implementasi LINQ ke Objek dari metode operator kueri standar dijalankan dengan salah satu dari dua cara utama: segera atau ditangguhkan. Operator kueri yang menggunakan eksekusi yang ditangguhkan juga dapat dibagi menjadi dua kategori: streaming dan non-streaming. Jika Anda tahu bagaimana operator kueri yang berbeda dijalankan, ini dapat membantu Anda memahami hasil yang Anda dapatkan dari kueri tertentu. Ini terutama berlaku jika sumber data berubah atau jika Anda membuat kueri di atas kueri lain. Topik ini mengklasifikasikan operator kueri standar sesuai dengan cara eksekusinya.

Tata Krama Eksekusi

Segera

Eksekusi langsung berarti bahwa sumber data dibaca dan operasi dilakukan pada titik dalam kode tempat kueri dideklarasikan. Semua operator kueri standar yang mengembalikan satu hasil, yang tidak dapat diteriterasi, dieksekusi segera.

Ditangguhkan

Eksekusi yang ditangguhkan berarti bahwa operasi tidak dilakukan pada titik dalam kode tempat kueri dideklarasikan. Operasi dilakukan hanya ketika variabel kueri dijumlahkan, misalnya dengan menggunakan pernyataan For Each. Ini berarti bahwa hasil menjalankan kueri bergantung pada konten sumber data saat kueri dijalankan daripada saat kueri ditentukan. Jika variabel kueri dijumlahkan beberapa kali, hasilnya mungkin berbeda setiap saat. Hampir semua operator kueri standar yang jenis pengembaliannya IEnumerable<T> atau IOrderedEnumerable<TElement> dijalankan dengan cara yang ditangguhkan.

Operator kueri yang menggunakan eksekusi yang ditangguhkan juga dapat diklasifikasikan sebagai streaming atau non-streaming.

Siaran Langsung

Operator streaming tidak perlu membaca semua data sumber sebelum menghasilkan elemen. Pada saat eksekusi, operator streaming melakukan operasinya pada setiap elemen sumber saat dibaca dan menghasilkan elemen jika sesuai. Operator streaming terus membaca elemen sumber hingga elemen hasil dapat diproduksi. Ini berarti bahwa lebih dari satu elemen sumber mungkin dibaca untuk menghasilkan satu elemen hasil.

Tidak melakukan streaming

Operator non-streaming harus membaca semua data sumber sebelum dapat menghasilkan elemen hasil. Operasi seperti pengurutan atau pengelompokan termasuk dalam kategori ini. Pada saat eksekusi, operator kueri non-streaming membaca semua data sumber, memasukkannya ke dalam struktur data, melakukan operasi, dan menghasilkan elemen yang dihasilkan.

Tabel Klasifikasi

Tabel berikut mengklasifikasikan setiap metode operator kueri standar sesuai dengan metode eksekusinya.

Nota

Jika operator ditandai dalam dua kolom, dua urutan input terlibat dalam operasi, dan setiap urutan dievaluasi secara berbeda. Dalam kasus ini, selalu urutan pertama dalam daftar parameter yang dievaluasi secara bertahap dan ditunda.

Operator Kueri Standar Jenis Hasil Eksekusi Segera Eksekusi Streaming yang Ditangguhkan Eksekusi Non-Streaming Yang Ditangguhkan
Aggregate TSource X
All Boolean X
Any Boolean X
AsEnumerable IEnumerable<T> X
Average Nilai numerik tunggal X
Cast IEnumerable<T> X
Concat IEnumerable<T> X
Contains Boolean X
Count Int32 X
DefaultIfEmpty IEnumerable<T> X
Distinct IEnumerable<T> X
ElementAt TSource X
ElementAtOrDefault TSource X
Empty IEnumerable<T> X
Except IEnumerable<T> X X
First TSource X
FirstOrDefault TSource X
GroupBy IEnumerable<T> X
GroupJoin IEnumerable<T> X X
Intersect IEnumerable<T> X X
Join IEnumerable<T> X X
Last TSource X
LastOrDefault TSource X
LongCount Int64 X
Max Nilai numerik tunggal, TSource, atau TResult X
Min Nilai numerik tunggal, TSource, atau TResult X
OfType IEnumerable<T> X
OrderBy IOrderedEnumerable<TElement> X
OrderByDescending IOrderedEnumerable<TElement> X
Range IEnumerable<T> X
Repeat IEnumerable<T> X
Reverse IEnumerable<T> X
Select IEnumerable<T> X
SelectMany IEnumerable<T> X
SequenceEqual Boolean X
Single TSource X
SingleOrDefault TSource X
Skip IEnumerable<T> X
SkipWhile IEnumerable<T> X
Sum Nilai numerik tunggal X
Take IEnumerable<T> X
TakeWhile IEnumerable<T> X
ThenBy IOrderedEnumerable<TElement> X
ThenByDescending IOrderedEnumerable<TElement> X
ToArray Larik TSource X
ToDictionary Dictionary<TKey,TValue> X
ToList IList<T> X
ToLookup ILookup<TKey,TElement> X
Union IEnumerable<T> X
Where IEnumerable<T> X

Lihat juga