Operator Kueri Standar di LINQ to Entities

Dalam kueri, Anda menentukan informasi yang ingin Anda ambil dari sumber data. Kueri juga dapat menentukan bagaimana informasi tersebut harus diurutkan, dikelompokkan, dan dibentuk sebelum dikembalikan. LINQ menyediakan sekumpulan metode kueri standar yang bisa Anda gunakan dalam kueri. Sebagian besar metode ini beroperasi pada urutan; dalam konteks ini, urutan adalah objek yang tipenya mengimplementasikan antarmuka IEnumerable<T> atau antarmuka IQueryable<T>. Fungsionalitas kueri operator kueri standar mencakup pemfilteran, proyeksi, agregasi, pengurutan, pengelompokan, penomoran halaman, dan lainnya. Beberapa operator kueri standar yang lebih sering digunakan memiliki sintaks kata kunci khusus sehingga dapat dipanggil dengan menggunakan sintaks ekspresi kueri. Ekspresi kueri adalah cara yang berbeda dan lebih mudah dibaca untuk mengekspresikan kueri daripada yang setara berbasis metode. Klausul ekspresi kueri diterjemahkan ke dalam panggilan ke metode kueri pada saat kompilasi. Untuk daftar operator kueri standar yang memiliki klausa ekspresi kueri yang setara, lihat Ringkasan Operator Kueri Standar.

Tidak semua operator kueri standar didukung dalam kueri LINQ ke Entitas. Untuk informasi lebih lanjut, lihat Metode LINQ yang Didukung dan Tidak Didukung (LINQ ke Entitas). Topik ini menyediakan informasi tentang operator kueri standar yang khusus untuk LINQ ke Entitas. Untuk informasi selengkapnya tentang masalah yang diketahui di LINQ ke kueri Entitas, lihat Masalah dan Pertimbangan yang Diketahui di LINQ ke Entitas.

Metode Proyeksi dan Pemfilteran

Proyeksi mengacu pada transformasi elemen hasil yang ditetapkan menjadi bentuk yang diinginkan. Misalnya, Anda dapat memproyeksikan subset properti yang Anda butuhkan dari setiap objek dalam tataan hasil, Anda dapat memproyeksikan properti dan melakukan perhitungan matematika di atasnya, atau Anda dapat memproyeksikan seluruh objek dari kumpulan hasil. Metode proyeksi adalah Select dan SelectMany.

Pemfilteran mengacu pada operasi membatasi kumpulan hasil agar hanya berisi elemen-elemen yang cocok dengan kondisi tertentu. Metode pemfilteran adalah Where.

Sebagian besar kelebihan proyeksi dan metode pemfilteran didukung dalam LINQ ke Entitas, dengan pengecualian dari mereka yang menerima argumen posisi.

Metode Gabungan

Bergabung adalah operasi penting dalam kueri yang menargetkan sumber data yang tidak memiliki hubungan yang dapat dinavigasi satu sama lain. Gabungan dari dua sumber data adalah asosiasi objek dalam satu sumber data dengan objek di sumber data lain yang berbagi atribut atau properti umum. Metode gabungan adalah Join dan GroupJoin.

Sebagian besar kelebihan metode gabungan didukung, dengan pengecualian yang menggunakan IEqualityComparer<T>. Ini karena perbandingan tidak dapat diterjemahkan ke sumber data.

Metode Penetapan

Mengatur operasi di LINQ adalah operasi kueri yang mendasarkan tataan hasilnya pada keberadaan atau tidak adanya elemen yang setara dalam koleksi yang sama atau di koleksi lain (atau set). Metode yang ditetapkan adalah All, Any, Concat, Contains, DefaultIfEmpty, Distinct, EqualAll, Except, Intersect, dan Union.

Sebagian besar kelebihan metode yang ditetapkan didukung di LINQ ke Entitas, meskipun ada beberapa perbedaan perilaku dibandingkan dengan LINQ to Objects. Namun, atur metode yang menggunakan IEqualityComparer<T> tidak didukung karena perbandingan tidak dapat diterjemahkan ke sumber data.

Metode Pemesanan

Pengurutan, atau pengurutan, mengacu pada pengurutan elemen hasil yang ditetapkan berdasarkan satu atau beberapa atribut. Dengan menentukan lebih dari satu kriteria pengurutan, Anda dapat memutuskan ikatan dalam grup.

Sebagian besar kelebihan metode pemesanan didukung, dengan pengecualian yang menggunakan IComparer<T>. Ini karena perbandingan tidak dapat diterjemahkan ke sumber data. Metode pemesanan adalah OrderBy, OrderByDescending, ThenBy, ThenByDescending, dan Reverse.

Karena kueri dijalankan pada sumber data, perilaku pemesanan mungkin berbeda dari kueri yang dijalankan di runtime bahasa umum. Ini karena opsi pemesanan, seperti pengurutan kasus, urutan kanji, dan urutan null, dapat diatur dalam sumber data. Bergantung pada sumber data, opsi pemesanan ini mungkin menghasilkan hasil yang berbeda dari di runtime bahasa umum.

Jika Anda menentukan pemilih kunci yang sama dalam lebih dari satu operasi pemesanan, urutan duplikat akan diproduksi. Ini tidak valid dan pengecualian akan dilemparkan.

Metode Pengelompokan

Pengelompokan mengacu pada menempatkan data ke dalam kelompok sehingga elemen dalam setiap kelompok memiliki atribut yang sama. Metode pengelompokan adalah GroupBy.

Sebagian besar kelebihan metode pengelompokan didukung, dengan pengecualian dari metode yang menggunakan IEqualityComparer<T>. Ini karena perbandingan tidak dapat diterjemahkan ke sumber data.

Metode pengelompokan dipetakan ke sumber data menggunakan sub-kueri yang berbeda untuk pemilih kunci. Sub-kueri perbandingan pemilih kunci dijalankan dengan menggunakan semantik sumber data, termasuk masalah yang terkait dengan membandingkan nilai null.

Metode Agregat

Operasi agregasi menghitung satu nilai dari kumpulan nilai. Misalnya, menghitung suhu harian rata-rata dari nilai suhu harian senilai sebulan adalah operasi agregasi. Metode agregat adalah Aggregate, Average, Count, LongCount, Max, Min, dan Sum.

Sebagian besar kelebihan beban metode agregat didukung. Untuk perilaku yang terkait dengan nilai null, metode agregat menggunakan semantik sumber data. Perilaku metode agregasi ketika nilai null terlibat mungkin berbeda, tergantung pada sumber data back-end mana yang digunakan. Perilaku metode agregat menggunakan semantik sumber data mungkin juga berbeda dari apa yang diharapkan dari metode runtime bahasa umum. Misalnya, perilaku default untuk metode Sum pada SQL Server adalah mengabaikan nilai null apa pun daripada melemparkan pengecualian.

Setiap pengecualian yang dihasilkan dari agregasi, seperti luapan dari fungsi Sum, dilemparkan sebagai pengecualian sumber data atau pengecualian Kerangka Kerja Entitas selama materialisasi hasil kueri.

Untuk metode yang melibatkan perhitungan atas urutan, seperti Sum atau Average, perhitungan aktual dilakukan di server. Akibatnya, konversi jenis dan hilangnya presisi mungkin terjadi di server, dan hasilnya mungkin berbeda dari apa yang diharapkan menggunakan semantik runtime bahasa umum.

Perilaku default metode agregat untuk nilai null/non-null diperlihatkan dalam tabel berikut:

Metode Tidak ada data Semua nilai null Beberapa nilai null Tidak ada nilai null
Average Menampilkan null. Menampilkan null. Mengembalikan rata-rata nilai non-null dalam urutan. Menghitung rata-rata urutan nilai numerik.
Count Mengembalikan 0 Mengembalikan jumlah nilai null dalam urutan. Mengembalikan jumlah nilai null dan non-null dalam urutan. Mengembalikan jumlah elemen dalam urutan.
Max Menampilkan null. Menampilkan null. Mengembalikan nilai maksimum bukan null dalam urutan. Menghasilkan nilai maksimum dalam urutan.
Min Menampilkan null. Menampilkan null. Mengembalikan nilai minimum non-null dalam urutan. Mengembalikan nilai minimum secara berurutan.
Sum Menampilkan null. Menampilkan null. Mengembalikan jumlah nilai non-null dalam urutan. Menghitung jumlah urutan nilai numerik.

Metode Jenis

Dua metode LINQ yang menangani konversi dan pengujian jenis keduanya didukung dalam konteks Entity Framework. Ini berarti bahwa satu-satunya jenis yang didukung adalah jenis yang memetakan ke jenis Entity Framework yang sesuai. Untuk daftar jenis ini, lihat Jenis Model Konseptual (CSDL). Metode jenis adalah Convert dan OfType.

OfType didukung untuk jenis entitas. Convert didukung untuk jenis primitif model konseptual. Metode C# is dan as juga didukung.

Metode penomoran halaman

Operasi penomoran mengembalikan satu elemen atau beberapa elemen dari suatu urutan. Metode penomoran yang didukung adalah First, FirstOrDefault, Single, SingleOrDefault, Skip, dan Take.

Sejumlah metode penomoran tidak didukung, baik karena ketidakmampuan untuk memetakan fungsi ke sumber data atau kurangnya urutan implisit set pada sumber data. Metode yang mengembalikan nilai default dibatasi untuk jenis primitif model konseptual dan jenis referensi dengan default null. Metode penomoran yang dieksekusi pada urutan kosong akan mengembalikan null.

Lihat juga