LINQ ke Entitas

LINQ ke Entitas menyediakan dukungan Language-Integrated Query (LINQ) yang memungkinkan pengembang untuk menulis kueri terhadap model konseptual Kerangka Entitas menggunakan Visual Basic atau Visual C#. Kueri terhadap Entity Framework diwakili oleh kueri pohon perintah, yang dijalankan terhadap konteks objek. LINQ ke Entitas mengonversi kueri Language-Integrated Query (LINQ) menjadi kueri pohon perintah, mengeksekusi kueri terhadap Entity Framework, dan mengembalikan objek yang dapat digunakan oleh Entity Framework dan LINQ. Berikut ini adalah proses untuk membuat dan menjalankan kueri LINQ ke Entitas:

  1. Buat instans ObjectQuery<T> dari ObjectContext.

  2. Buat kueri LINQ ke Entitas di C# atau Visual Basic dengan menggunakan instans ObjectQuery<T>.

  3. Mengonversi operator dan ekspresi kueri standar LINQ menjadi pohon perintah.

  4. Jalankan kueri, dalam representasi pohon perintah, terhadap sumber data. Setiap pengecualian yang dilemparkan pada sumber data selama eksekusi diteruskan langsung ke klien.

  5. Mengembalikan hasil kueri kembali ke klien.

Membuat Instans ObjectQuery

Kelas ObjectQuery<T> generik mewakili kueri yang mengembalikan kumpulan entitas nol atau lebih yang ditik. Kueri objek biasanya dibangun dari konteks objek yang ada, daripada dibangun secara manual, dan selalu termasuk dalam konteks objek tersebut. Konteks ini menyediakan informasi koneksi dan metadata yang diperlukan untuk menyusun dan menjalankan kueri. Kelas generik ObjectQuery<T> mengimplementasikan antarmuka generik IQueryable<T>, yang metode pembangunnya memungkinkan kueri LINQ dibuat secara bertahap. Anda juga dapat membiarkan pengkompilasi menyimpulkan jenis entitas dengan menggunakan kata kunci C# var (Dim dalam Visual Basic, dengan inferensi jenis lokal diaktifkan).

Menyusun Kueri

Instans dari kelas generik ObjectQuery<T>, yang mengimplementasikan antarmuka IQueryable<T> generik, berfungsi sebagai sumber data untuk kueri LINQ ke Entitas. Dalam kueri, Anda menentukan dengan tepat informasi yang ingin Anda ambil dari sumber data. Kueri juga dapat menentukan bagaimana informasi tersebut harus diurutkan, dikelompokkan, dan dibentuk sebelum dikembalikan. Di LINQ, kueri disimpan dalam variabel. Variabel kueri ini tidak mengambil tindakan dan tidak mengembalikan data; hanya menyimpan informasi kueri. Setelah membuat kueri, Anda harus menjalankan kueri tersebut untuk mengambil data apa pun.

Kueri LINQ to Entity dapat disusun dalam dua sintaks yang berbeda: sintaks ekspresi kueri dan sintaks kueri berbasis metode. Sintaks ekspresi kueri dan sintaksis kueri berbasis metode baru di C# 3.0 dan Visual Basic 9.0.

Untuk informasi selengkapnya, lihat Kueri di LINQ ke Entitas.

Konversi Kueri

Untuk menjalankan kueri LINQ ke Entitas terhadap Entity Framework, kueri LINQ harus dikonversi ke representasi pohon perintah yang dapat dijalankan terhadap Kerangka Kerja Entitas.

Kueri LINQ ke Entitas terdiri dari operator kueri standar LINQ (seperti Select, Where, dan GroupBy) dan ekspresi (x > 10, Contact.LastName, dan seterusnya). Operator LINQ tidak didefinisikan oleh kelas, melainkan merupakan metode pada kelas. Dalam LINQ, ekspresi dapat berisi apa pun yang diizinkan oleh jenis dalam namespace layanan System.Linq.Expressions dan, dengan ekstensi, apa pun yang dapat diwakili dalam fungsi lambda. Ini adalah superset dari ekspresi yang diizinkan oleh Entity Framework, yang berdasarkan definisi dibatasi untuk operasi yang diizinkan pada database, dan didukung oleh ObjectQuery<T>.

Dalam Entity Framework, baik operator maupun ekspresi diwakili oleh hierarki jenis tunggal, yang kemudian ditempatkan di pohon perintah. Pohon perintah digunakan oleh Entity Framework untuk mengeksekusi kueri. Jika kueri LINQ tidak dapat diekspresikan sebagai pohon perintah, pengecualian akan ditampilkan saat kueri sedang dikonversi. Konversi kueri LINQ ke Entitas melibatkan dua sub-konversi: konversi operator kueri standar, dan konversi ekspresi.

Ada sejumlah operator kueri standar LINQ yang tidak memiliki terjemahan yang valid di LINQ ke Entitas. Upaya untuk menggunakan operator ini akan menghasilkan pengecualian pada waktu terjemahan kueri. Untuk daftar LINQ yang didukung ke operator Entitas, lihat Metode LINQ yang Didukung dan Tidak Didukung (LINQ ke Entitas).

Untuk informasi selengkapnya tentang menggunakan operator kueri standar di LINQ ke Entitas, lihat Operator Kueri Standar di kueri LINQ ke Entitas.

Secara umum, ekspresi dalam LINQ ke Entitas dievaluasi di server, sehingga perilaku ekspresi tidak diharapkan mengikuti semantik CLR. Untuk informasi selengkapnya, lihat Ekspresi di kueri LINQ ke Entitas.

Untuk informasi tentang bagaimana panggilan metode CLR dipetakan ke fungsi kanonis di sumber data, lihat Metode CLR ke Pemetaan Fungsi Kanonis.

Untuk informasi tentang cara memanggil fungsi kanonis, database, dan kustom dari dalam kueri LINQ ke Entitas, lihat Fungsi Panggilan di kueri LINQ Entities.

Eksekusi Kueri

Setelah kueri LINQ dibuat oleh pengguna, kueri dikonversi ke representasi yang kompatibel dengan Kerangka Kerja Entitas (dalam bentuk pohon perintah), yang kemudian dijalankan terhadap sumber data. Pada waktu eksekusi kueri, semua ekspresi kueri (atau komponen kueri) dievaluasi pada klien atau di server. Ini termasuk ekspresi yang digunakan dalam materialisasi hasil atau proyeksi entitas. Untuk informasi selengkapnya, lihat Eksekusi Kueri. Untuk informasi tentang cara meningkatkan performa dengan mengkompilasi kueri sekali lalu menjalankannya beberapa kali dengan parameter yang berbeda, lihat Kueri yang Dikompilasi (LINQ ke Entitas).

Materialisasi

Materialisasi adalah proses mengembalikan hasil kueri kembali ke klien sebagai jenis runtime bahasa umum. Di LINQ to Entities, rekaman data hasil kueri tidak pernah dikembalikan; selalu ada jenis runtime bahasa umum pendukung, yang ditentukan oleh pengguna atau oleh Entity Framework, atau dihasilkan oleh pengompilasi (jenis anonim). Semua materialisasi objek dilakukan oleh Entity Framework. Kesalahan apa pun yang dihasilkan dari ketidakmampuan untuk memetakan antara Entity Framework dan runtime bahasa umum akan menyebabkan pengecualian dimunculkan selama materialisasi objek.

Hasil kueri biasanya ditampilkan sebagai salah satu dari berikut ini:

  • Kumpulan dari nol atau lebih objek entitas yang diketik atau proyeksi jenis kompleks yang didefinisikan dalam model konseptual.

  • Jenis runtime bahasa umum yang didukung oleh Entity Framework.

  • Koleksi sebaris.

  • Jenis anonim.

Untuk informasi selengkapnya, lihat Hasil Kueri.

Di Bagian Ini

Kueri dalam LINQ ke Entitas

Ekspresi dalam LINQ ke Kueri Entitas

Memanggil Fungsi di Kueri LINQ to Entities

Kueri yang Dikompilasi (LINQ to Entities)

Eksekusi Kueri

Hasil Kueri

Operator Kueri Standar di Kueri LINQ to Entities

Metode runtime bahasa umum ke Pemetaan Fungsi Kanonik

Metode LINQ yang Didukung dan Tidak Didukung (LINQ ke Entitas)

Masalah Umum dan Pertimbangan di LINQ untuk Entitas

Lihat juga