Kerangka Kerja Entitas - Kueri Proyeksi
LINQ ke Entitas
Salah satu konsep terpenting untuk memahami LINQ ke Entitas adalah bahwa ini adalah bahasa deklaratif. Fokusnya adalah untuk menentukan informasi apa yang Anda butuhkan, bukan pada bagaimana mendapatkan informasi tersebut.
Ini berarti Anda dapat menghabiskan lebih banyak waktu untuk bekerja dengan data dan lebih sedikit waktu untuk mencoba mencari tahu kode dasar yang diperlukan untuk melakukan tugas-tugas seperti mengakses database.
Penting untuk dipahami bahwa bahasa deklaratif tidak benar-benar menghapus kontrol apa pun dari pengembang, tetapi membantu pengembang memusatkan perhatian pada hal yang penting.
LINQ ke Kata Kunci Penting Entitas
Penting untuk mengetahui kata kunci dasar yang digunakan untuk membuat kueri LINQ. Hanya ada beberapa kata kunci yang perlu diingat, tetapi Anda dapat menggabungkannya dengan berbagai cara untuk mendapatkan hasil tertentu. Daftar berikut berisi kata kunci dasar ini dan memberikan penjelasan sederhana tentang masing-masing kata kunci.
No Sr | Kata Kunci & Deskripsi |
---|---|
1 | Ascending Menentukan bahwa operasi pengurutan berlangsung dari elemen terkecil (atau terendah) dari rentang hingga elemen tertinggi dari rentang. Ini biasanya merupakan pengaturan default. Misalnya, saat menjalankan pengurutan alfabet, pengurutan akan berada dalam rentang dari A hingga Z. |
2 | By Menentukan bidang atau ekspresi yang digunakan untuk menerapkan pengelompokan. Bidang atau ekspresi mendefinisikan kunci yang digunakan untuk melakukan tugas pengelompokan. |
3 | Descending Menentukan bahwa operasi pengurutan berlangsung dari elemen terbesar (atau tertinggi) dari rentang hingga elemen terendah dari rentang. Misalnya, saat menjalankan pengurutan alfabet, pengurutan akan berada dalam rentang dari Z hingga A. |
4 | Equals Digunakan di antara klausa kiri dan kanan pernyataan gabungan untuk menggabungkan sumber data kontekstual primer ke sumber data kontekstual sekunder. Bidang atau ekspresi di sebelah kiri kata kunci sama dengan menentukan sumber data utama, sedangkan bidang atau ekspresi di sebelah kanan kata kunci sama dengan menentukan sumber data sekunder. |
5 | From Menentukan sumber data yang digunakan untuk mendapatkan informasi yang diperlukan dan menentukan variabel rentang. Variabel ini memiliki tujuan yang sama dengan variabel yang digunakan untuk iterasi dalam satu loop. |
6 | Group Mengatur keluaran ke dalam kelompok menggunakan nilai kunci yang Anda tentukan. Gunakan beberapa klausul grup untuk membuat beberapa tingkat organisasi keluaran. Urutan klausa grup menentukan kedalaman di mana nilai kunci tertentu muncul dalam urutan pengelompokan. Anda menggabungkan kata kunci ini dengan oleh untuk membuat konteks tertentu. |
7 | In Digunakan dalam berbagai cara. Dalam kasus ini, kata kunci menentukan sumber database kontekstual yang digunakan untuk kueri. Saat bekerja dengan gabungan, kata kunci in digunakan untuk setiap sumber database kontekstual yang digunakan untuk gabungan. |
8 | Into Menentukan pengidentifikasi yang bisa Anda gunakan sebagai referensi untuk klausa kueri LINQ seperti gabung, grup, dan pilih. |
9 | Join Membuat satu sumber data dari dua sumber data terkait, seperti dalam penyiapan master / detail. Gabungan bisa menentukan gabungan dalam, grup, atau kiri-luar, dengan gabungan dalam sebagai default. Anda dapat membaca lebih lanjut tentang bergabung di msdn.microsoft.com |
10 | Let Mendefinisikan variabel rentang yang dapat Anda gunakan untuk menyimpan hasil subekspresi dalam ekspresi kueri. Biasanya, variabel rentang digunakan untuk memberikan keluaran enumerasi tambahan atau untuk meningkatkan efisiensi kueri (sehingga tugas tertentu, seperti menemukan nilai huruf kecil dari sebuah string, tidak perlu dilakukan lebih dari satu kali). |
11 | On Menentukan bidang atau ekspresi yang digunakan untuk mengimplementasikan gabungan. Bidang atau ekspresi menentukan elemen yang sama untuk kedua sumber data kontekstual. |
12 | Orderby Membuat tata urutan kueri. Anda dapat menambahkan kata kunci ascending atau descending untuk mengontrol urutan pengurutan. Gunakan beberapa klausa orderby untuk membuat beberapa tingkat pengurutan. Urutan klausa orderby menentukan urutan penanganan ekspresi pengurutan, jadi menggunakan urutan yang berbeda akan menghasilkan keluaran yang berbeda. |
13 | Where Mendefinisikan apa yang harus diambil LINQ dari sumber data. Anda menggunakan satu atau lebih ekspresi Boolean untuk menentukan secara spesifik apa yang akan diambil. Ekspresi Boolean dipisahkan satu sama lain menggunakan && (AND) dan || (OR) operator. |
14 | Select Menentukan keluaran dari kueri LINQ dengan menentukan informasi apa yang akan dikembalikan. Pernyataan ini mendefinisikan tipe data dari elemen yang dikembalikan LINQ selama proses iterasi. |
Proyeksi
Kueri proyeksi meningkatkan efisiensi aplikasi Anda, dengan hanya mengambil bidang tertentu dari database Anda.
Setelah Anda memiliki data, Anda mungkin ingin memproyeksikan atau memfilternya sesuai kebutuhan untuk membentuk data sebelum dikeluarkan.
Tugas utama ekspresi LINQ ke Entitas adalah mendapatkan data dan menyediakannya sebagai keluaran.
Bagian "Mengembangkan kueri LINQ ke Entitas" dari bab ini mendemonstrasikan teknik untuk melakukan tugas dasar ini.
Mari kita lihat kode berikut di mana daftar siswa akan diambil.
using (var context = new UniContextEntities()) {
var studentList = from s in context.Students select s;
foreach (var student in studentList) {
string name = student.FirstMidName + " " + student.LastName;
Console.WriteLine("ID : {0}, Name: {1}", student.ID, name);
}
}
Objek Tunggal
Untuk mengambil satu objek siswa, Anda dapat menggunakan metode enumerabel First () atau FirstOrDefault yang mengembalikan elemen pertama dari suatu urutan. Perbedaan antara First dan FirstOrDefault adalah First () akan memunculkan pengecualian, jika tidak ada data hasil untuk kriteria yang diberikan sedangkan FirstOrDefault () mengembalikan nilai default null, jika tidak ada data hasil. Dalam potongan kode di bawah ini, siswa pertama dari daftar akan diambil yang nama depannya adalah Ali.
using (var context = new UniContextEntities()) {
var student = (from s in context.Students where s.FirstMidName
== "Ali" select s).FirstOrDefault<Student>();
string name = student.FirstMidName + " " + student.LastName;
Console.WriteLine("ID : {0}, Name: {1}", student.ID, name);
}
Anda juga bisa menggunakan Single () atau SingleOrDefault untuk mendapatkan satu objek siswa yang mengembalikan satu elemen spesifik dari suatu urutan. Dalam contoh berikut, satu siswa diambil dengan ID 2.
using (var context = new UniContextEntities()) {
var student = (from s in context.Students where s.ID
== 2 select s).SingleOrDefault<Student>();
string name = student.FirstMidName + " " + student.LastName;
Console.WriteLine("ID : {0}, Name: {1}", student.ID, name);
Console.ReadKey();
}
Daftar Objek
Jika Anda ingin mengambil daftar siswa yang nama depannya adalah Ali maka Anda dapat menggunakan metode Enumerable ToList ().
using (var context = new UniContextEntities()) {
var studentList = (from s in context.Students where s.FirstMidName
== "Ali" select s).ToList();
foreach (var student in studentList) {
string name = student.FirstMidName + " " + student.LastName;
Console.WriteLine("ID : {0}, Name: {1}", student.ID, name);
}
Console.ReadKey();
}
Memesan
Untuk mengambil data / daftar dalam urutan tertentu Anda dapat menggunakan kata kunci orderby. Pada kode berikut, potongan daftar siswa akan diambil dalam urutan menaik.
using (var context = new UniContextEntities()) {
var studentList = (from s in context.Students orderby
s.FirstMidName ascending select s).ToList();
foreach (var student in studentList) {
string name = student.FirstMidName + " " + student.LastName;
Console.WriteLine("ID : {0}, Name: {1}", student.ID, name);
}
Console.ReadKey();
}
Kueri Kerangka Kerja Entitas Standar Vs Proyeksi
Misalkan, Anda memiliki model Student yang berisi ID, FirstMidName, LastName, dan EnrollmentDate. Jika Anda ingin mengembalikan daftar Siswa, kueri standar akan mengembalikan semua bidang. Tetapi jika Anda hanya ingin mendapatkan daftar siswa yang berisi bidang ID, FirstMidName, dan LastName. Di sinilah Anda harus menggunakan kueri proyeksi. Berikut adalah contoh sederhana dari permintaan proyeksi.
using (var context = new UniContextEntities()) {
var studentList = from s in context.Students
orderby s.FirstMidName ascending
where s.FirstMidName == "Ali"
select new {s.ID, s.FirstMidName, s.LastName};
foreach (var student in studentList) {
string name = student.FirstMidName + " " + student.LastName;
Console.WriteLine("ID : {0}, Name: {1}", student.ID, name);
}
Console.ReadKey();
}
Kueri proyeksi di atas mengecualikan bidang EnrollmentDate. Ini akan membuat aplikasi Anda lebih cepat.