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.
Ada berbagai cara untuk memperluas LINQ untuk memungkinkan sumber data apa pun dikueri dalam pola LINQ. Sumber data mungkin merupakan struktur data, layanan Web, sistem file, atau database, untuk memberi nama beberapa. Pola LINQ memudahkan klien untuk mengkueri sumber data tempat kueri LINQ diaktifkan, karena sintaks dan pola kueri tidak berubah. Cara-cara di mana LINQ dapat diperluas ke sumber data ini meliputi yang berikut ini:
Implementasi antarmuka IEnumerable<T> dalam tipe untuk memungkinkan kueri LINQ ke objek dari tipe tersebut.
Membuat metode operator kueri standar seperti Where dan Select yang memperluas jenis, untuk mengaktifkan kueri LINQ kustom dari jenis tersebut.
Membuat penyedia layanan untuk sumber data Anda yang mengimplementasikan antarmuka IQueryable<T>. Penyedia yang mengimplementasikan antarmuka ini menerima kueri LINQ dalam bentuk pohon ekspresi, yang dapat dijalankan dengan cara kustom, misalnya dari jarak jauh.
Membuat penyedia untuk sumber data Anda yang memanfaatkan teknologi LINQ yang ada. Penyedia seperti itu akan memungkinkan tidak hanya kueri, tetapi juga operasi penyisipan, pembaruan, dan penghapusan, serta pemetaan untuk jenis yang ditentukan pengguna.
Topik ini membahas opsi ini.
Cara Mengaktifkan Kueri LINQ dari Sumber Data Anda
Data In-Memory
Ada dua cara untuk memungkinkan penggunaan kueri LINQ pada data yang berada di memori. Jika data adalah jenis yang mengimplementasikan IEnumerable<T>, Anda bisa mengkueri data dengan menggunakan LINQ ke Objek. Jika tidak masuk akal untuk mengaktifkan enumerasi jenis Anda dengan menerapkan IEnumerable<T> antarmuka, Anda dapat menentukan metode operator kueri standar LINQ dalam jenis tersebut atau membuat metode operator kueri standar LINQ yang memperluas jenis. Implementasi kustom operator kueri standar harus menggunakan eksekusi yang ditangguhkan untuk mengembalikan hasilnya.
Data dari Jarak Jauh
Opsi terbaik untuk mengaktifkan kueri LINQ dari sumber data jarak jauh adalah mengimplementasikan IQueryable<T> antarmuka. Namun, ini berbeda dari memperluas penyedia seperti LINQ ke SQL untuk sumber data. Tidak ada model penyedia untuk memperluas teknologi LINQ yang ada, seperti LINQ ke SQL, ke jenis sumber data lain yang tersedia di Visual Studio 2008.
Penyedia LINQ yang Mendukung IQueryable
Penyedia LINQ yang menerapkan IQueryable<T> dapat sangat bervariasi dalam kompleksitasnya. Bagian ini membahas berbagai tingkat kompleksitas.
Penyedia yang kurang kompleks IQueryable mungkin berinteraksi dengan satu metode layanan Web. Jenis penyedia ini sangat spesifik karena mengharapkan informasi khusus dalam kueri yang ditanganinya. Sistem tipe tertutup ini mungkin menunjukkan satu jenis hasil. Sebagian besar eksekusi kueri terjadi secara lokal, misalnya dengan menggunakan Enumerable implementasi operator kueri standar. Penyedia yang kurang kompleks mungkin hanya memeriksa satu ekspresi panggilan metode di pohon ekspresi yang mewakili kueri, dan membiarkan logika kueri yang tersisa ditangani di tempat lain.
Penyedia dengan kompleksitas menengah mungkin dapat menargetkan sumber data yang memiliki bahasa permintaan yang hanya sebagian ekspresif. Jika menargetkan layanan Web, mungkin akan berinteraksi dengan lebih dari satu metode dalam layanan tersebut dan memilih metode yang akan dipanggil berdasarkan pertanyaan yang diajukan oleh kueri. Penyedia kompleksitas sedang akan memiliki sistem tipe yang lebih kaya daripada penyedia sederhana, tetapi akan tetap menjadi sistem tipe tetap. Misalnya, penyedia mungkin mengekspos jenis yang memiliki hubungan satu-ke-banyak yang dapat dilalui, tetapi tidak akan menyediakan teknologi pemetaan untuk jenis yang ditentukan pengguna.
Penyedia kompleks IQueryable , seperti penyedia LINQ ke SQL, mungkin menerjemahkan kueri LINQ lengkap ke bahasa kueri ekspresif, seperti SQL. Penyedia kompleks lebih umum daripada penyedia yang kurang kompleks, karena dapat menangani berbagai pertanyaan yang lebih luas dalam kueri. Ini juga memiliki sistem jenis terbuka dan oleh karena itu harus berisi infrastruktur yang luas untuk memetakan jenis yang ditentukan pengguna. Mengembangkan penyedia yang kompleks membutuhkan sejumlah besar upaya.