LINQ - Panduan Cepat
Pengembang di seluruh dunia selalu mengalami masalah dalam membuat kueri data karena kurangnya jalur yang ditentukan dan perlu menguasai beberapa teknologi seperti SQL, Layanan Web, XQuery, dll.
Diperkenalkan di Visual Studio 2008 dan dirancang oleh Anders Hejlsberg, LINQ (Language Integrated Query) memungkinkan penulisan kueri bahkan tanpa pengetahuan bahasa kueri seperti SQL, XML, dll. Kueri LINQ dapat ditulis untuk berbagai tipe data.
Contoh kueri LINQ
C #
using System;
using System.Linq;
class Program {
static void Main() {
string[] words = {"hello", "wonderful", "LINQ", "beautiful", "world"};
//Get only short words
var shortWords = from word in words where word.Length <= 5 select word;
//Print each word out
foreach (var word in shortWords) {
Console.WriteLine(word);
}
Console.ReadLine();
}
}
VB
Module Module1
Sub Main()
Dim words As String() = {"hello", "wonderful", "LINQ", "beautiful", "world"}
' Get only short words
Dim shortWords = From word In words _ Where word.Length <= 5 _ Select word
' Print each word out.
For Each word In shortWords
Console.WriteLine(word)
Next
Console.ReadLine()
End Sub
End Module
Ketika kode C # atau VB di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
hello
LINQ
world
Sintaks LINQ
Ada dua sintaks LINQ. Inilah yang berikut ini.
Lamda (Metode) Sintaks
var longWords = words.Where( w ⇒ w.length > 10);
Dim longWords = words.Where(Function(w) w.length > 10)
Query (Comprehension) Syntax
var longwords = from w in words where w.length > 10;
Dim longwords = from w in words where w.length > 10
Jenis-jenis LINQ
Jenis-jenis LINQ disebutkan di bawah ini secara singkat.
- LINQ ke Objek
- LINQ ke XML (XLINQ)
- LINQ ke DataSet
- LINQ ke SQL (DLINQ)
- LINQ ke Entitas
Selain di atas, ada juga tipe LINQ bernama PLINQ yang merupakan LINQ paralel Microsoft.
Arsitektur LINQ di .NET
LINQ memiliki arsitektur 3 lapis di mana lapisan paling atas terdiri dari ekstensi bahasa dan lapisan bawah terdiri dari sumber data yang biasanya objek yang mengimplementasikan antarmuka generik IEnumerable <T> atau IQuerable <T>. Arsitekturnya ditunjukkan di bawah ini.
Ekspresi Kueri
Ekspresi kueri tidak lain adalah kueri LINQ, yang diekspresikan dalam bentuk yang mirip dengan SQL dengan operator kueri seperti Select, Where dan OrderBy. Ekspresi kueri biasanya dimulai dengan kata kunci "Dari".
Untuk mengakses operator kueri LINQ standar, namespace System.Query harus diimpor secara default. Ekspresi ini ditulis dalam sintaks kueri deklaratif yaitu C # 3.0.
Di bawah ini adalah contoh untuk memperlihatkan operasi kueri lengkap yang terdiri dari pembuatan sumber data, definisi ekspresi kueri, dan eksekusi kueri.
C #
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Operators {
class LINQQueryExpressions {
static void Main() {
// Specify the data source.
int[] scores = new int[] { 97, 92, 81, 60 };
// Define the query expression.
IEnumerable<int> scoreQuery = from score in scores where score > 80 select score;
// Execute the query.
foreach (int i in scoreQuery) {
Console.Write(i + " ");
}
Console.ReadLine();
}
}
}
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
97 92 81
Metode Ekstensi
Diperkenalkan dengan .NET 3.5, metode ekstensi dideklarasikan di kelas statis saja dan memungkinkan penyertaan metode kustom ke objek untuk melakukan beberapa operasi kueri yang tepat guna memperluas kelas tanpa menjadi anggota sebenarnya dari kelas tersebut. Ini juga bisa kelebihan beban.
Singkatnya, metode ekstensi digunakan untuk menerjemahkan ekspresi kueri menjadi panggilan metode tradisional (berorientasi objek).
Perbedaan antara LINQ dan Stored Procedure
Ada berbagai perbedaan yang ada antara LINQ dan prosedur Tersimpan. Perbedaan ini disebutkan di bawah.
Prosedur yang disimpan jauh lebih cepat daripada kueri LINQ karena mengikuti rencana eksekusi yang diharapkan.
Sangat mudah untuk menghindari kesalahan waktu berjalan saat menjalankan kueri LINQ daripada dibandingkan dengan prosedur tersimpan karena yang pertama memiliki dukungan Intellisense Visual Studio serta pemeriksaan tipe penuh selama waktu kompilasi.
LINQ memungkinkan debugging dengan memanfaatkan debugger .NET yang tidak dalam kasus prosedur yang tersimpan.
LINQ menawarkan dukungan untuk beberapa database berbeda dengan prosedur tersimpan, di mana sangat penting untuk menulis ulang kode untuk berbagai jenis database.
Penyebaran solusi berbasis LINQ mudah dan sederhana dibandingkan dengan penerapan serangkaian prosedur yang tersimpan.
Need For LINQ
Sebelum LINQ, penting untuk mempelajari C #, SQL, dan berbagai API yang mengikat keduanya untuk membentuk aplikasi yang lengkap. Karena, sumber data dan bahasa pemrograman ini menghadapi ketidakcocokan impedansi; kebutuhan coding singkat dirasakan.
Di bawah ini adalah contoh dari berapa banyak teknik beragam yang digunakan oleh pengembang saat melakukan kueri data sebelum munculnya LINQ.
SqlConnection sqlConnection = new SqlConnection(connectString);
SqlConnection.Open();
System.Data.SqlClient.SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = "Select * from Customer";
return sqlCommand.ExecuteReader (CommandBehavior.CloseConnection)
Menariknya, dari baris kode unggulan, kueri hanya ditentukan oleh dua baris terakhir. Dengan menggunakan LINQ, kueri data yang sama dapat ditulis dalam bentuk kode warna yang dapat dibaca seperti yang disebutkan di bawah ini juga dalam waktu yang sangat singkat.
Northwind db = new Northwind(@"C:\Data\Northwnd.mdf");
var query = from c in db.Customers select c;
Keuntungan LINQ
LINQ menawarkan sejumlah keuntungan dan di antaranya yang paling utama adalah ekspresifnya yang kuat yang memungkinkan pengembang untuk mengekspresikan secara deklaratif. Beberapa keuntungan lain dari LINQ diberikan di bawah ini.
LINQ menawarkan penyorotan sintaks yang terbukti berguna untuk menemukan kesalahan selama waktu desain.
LINQ menawarkan IntelliSense yang berarti menulis kueri yang lebih akurat dengan mudah.
Menulis kode cukup cepat di LINQ dan dengan demikian waktu pengembangan juga berkurang secara signifikan.
LINQ memudahkan proses debug karena integrasinya dalam bahasa C #.
Melihat hubungan antara dua tabel mudah dilakukan dengan LINQ karena fitur hierarkinya dan ini memungkinkan pembuatan kueri yang menggabungkan beberapa tabel dalam waktu yang lebih singkat.
LINQ memungkinkan penggunaan sintaks LINQ tunggal sambil menanyakan banyak sumber data yang beragam dan ini terutama karena fondasinya yang terpadu.
LINQ dapat diperluas yang berarti dimungkinkan untuk menggunakan pengetahuan LINQ untuk menanyakan tipe sumber data baru.
LINQ menawarkan fasilitas untuk menggabungkan beberapa sumber data dalam satu kueri serta memecah masalah kompleks menjadi sekumpulan kueri singkat yang mudah di-debug.
LINQ menawarkan transformasi yang mudah untuk konversi satu tipe data ke yang lain seperti mengubah data SQL menjadi data XML.
Sebelum memulai dengan program LINQ, yang terbaik adalah terlebih dahulu memahami nuansa pengaturan lingkungan LINQ. LINQ membutuhkan kerangka .NET, platform revolusioner untuk memiliki beragam jenis aplikasi. Kueri LINQ dapat ditulis dalam C # atau Visual Basic dengan mudah.
Microsoft menawarkan alat untuk kedua bahasa ini yaitu C # dan Visual Basic melalui Visual Studio. Contoh kami semua dikompilasi dan ditulis dalam Visual Studio 2010. Namun, edisi Visual Basic 2013 juga tersedia untuk digunakan. Ini adalah versi terbaru dan memiliki banyak kesamaan dengan Visual Studio 2012.
Mendapatkan Visual Studio 2010 Diinstal pada Windows 7
Visual Studio dapat diinstal dari media instalasi seperti DVD. Kredensial administrator diperlukan untuk menginstal Visual Basic 2010 di sistem Anda dengan sukses. Sangat penting untuk melepaskan semua USB yang dapat dilepas dari sistem sebelum instalasi jika tidak, instalasi mungkin gagal. Beberapa persyaratan perangkat keras yang penting untuk dimiliki untuk instalasi adalah yang berikut ini.
Persyaratan Hardware
- 1,6 GHz atau lebih
- RAM 1 GB
- 3 GB (Ruang hard disk yang tersedia)
- 5400 RPM hard-disk drive
- Kartu video yang kompatibel dengan DirectX 9
- Drive DVD-ROM
Langkah Instalasi
Step 1 - Pertama setelah memasukkan DVD dengan Visual Studio 2010 Package, klik Install or run program from your media muncul di kotak pop-up di layar.
Step 2- Sekarang set up Visual Studio akan muncul di layar. MemilihInstall Microsoft Visual Studio 2010.
Step 3- Segera setelah Anda mengklik, prosesnya akan dimulai dan jendela penyiapan akan muncul di layar Anda. Setelah selesai memuat komponen instalasi yang akan memakan waktu lama, klikNext tombol untuk pindah ke langkah berikutnya.
Step 4 - Ini adalah langkah terakhir penginstalan dan halaman awal akan muncul di mana cukup pilih "Saya telah membaca dan menerima persyaratan lisensi" dan klik Next tombol.
Step 5- Sekarang pilih fitur untuk menginstal dari halaman opsi yang muncul di layar Anda. Anda bisa memilihFull atau Custompilihan. Jika Anda memiliki ruang disk lebih sedikit dari yang diperlukan yang ditunjukkan dalam persyaratan ruang disk, pilih Kustom.
Step 6- Saat Anda memilih opsi Kustom, jendela berikut akan muncul. Pilih fitur yang ingin Anda instal dan klikUpdate atau lanjutkan ke langkah 7. Namun, disarankan untuk tidak menggunakan opsi kustom karena di masa mendatang, Anda mungkin memerlukan fitur yang tidak Anda miliki.
Step 7- Segera jendela pop-up akan ditampilkan dan penginstalan akan dimulai yang mungkin membutuhkan waktu lama. Ingat, ini untuk memasang semua komponen.
Step 8- Terakhir, Anda akan dapat melihat pesan di jendela bahwa penginstalan telah berhasil diselesaikan. KlikFinish.
Menulis Program C # menggunakan LINQ di Visual Studio 2010
Mulai Visual Studio 2010 Ultimate edition dan pilih File diikuti oleh New Project dari menu.
Kotak dialog proyek baru akan muncul di layar Anda.
Sekarang pilih Visual C # sebagai kategori di bawah templat yang diinstal dan selanjutnya pilih templat Aplikasi Konsol seperti yang ditunjukkan pada gambar di bawah ini.
Beri nama untuk proyek Anda di kotak nama bawah dan tekan OK.
Proyek baru akan muncul di Solution Explorer di sisi kanan kotak dialog baru di layar Anda.
Sekarang pilih Program.cs dari Solution Explorer dan Anda dapat melihat kode di jendela editor yang dimulai dengan 'menggunakan Sistem'.
Di sini Anda dapat mulai membuat kode program C # berikut.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace HelloWorld {
class Program {
static void Main(string[] args) {
Console.WriteLine("Hello World")
Console.ReadKey();
}
}
}
Tekan tombol F5 dan jalankan proyek Anda. Sangat disarankan untuk menyimpan proyek dengan memilihFile → Save All sebelum menjalankan proyek.
Penulisan Program VB menggunakan LINQ di Visual Studio 2010
Mulai Visual Studio 2010 Ultimate edition dan pilih File diikuti oleh New Project dari menu.
Kotak dialog proyek baru akan muncul di layar Anda.
Sekarang pilih Visual Basic sebagai kategori di bawah templat yang diinstal dan selanjutnya pilih Templat Aplikasi Konsol.
Beri nama untuk proyek Anda di kotak nama bawah dan tekan OK.
Anda akan mendapatkan layar dengan Module1.vb. Mulailah menulis kode VB Anda di sini menggunakan LINQ.
Module Module1
Sub Main()
Console.WriteLine("Hello World")
Console.ReadLine()
End Sub
End Module
Tekan tombol F5 dan jalankan proyek Anda. Sangat disarankan untuk menyimpan proyek dengan memilihFile → Save All sebelum menjalankan proyek.
Ketika kode C # atau VB di atas di-cimpile dan dijalankan, itu menghasilkan hasil sebagai berikut -
Hello World
Serangkaian metode ekstensi yang membentuk pola kueri dikenal sebagai Operator Kueri Standar LINQ. Sebagai blok pembangun ekspresi kueri LINQ, operator ini menawarkan berbagai kemampuan kueri seperti pemfilteran, pengurutan, proyeksi, agregasi, dll.
Operator kueri standar LINQ dapat dikategorikan menjadi yang berikut berdasarkan fungsinya.
- Operator Filter
- Bergabunglah dengan Operator
- Operasi Proyeksi
- Operator Penyortiran
- Operator Pengelompokan
- Conversions
- Concatenation
- Aggregation
- Operasi Pengukur
- Operasi Partisi
- Operasi Pembangkitan
- Atur Operasi
- Equality
- Operator Elemen
Operator Filter
Pemfilteran adalah operasi untuk membatasi kumpulan hasil sehingga hanya elemen yang dipilih yang memenuhi kondisi tertentu.
Tunjukkan Contoh
Operator | Deskripsi | C # Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
dimana | Filter nilai berdasarkan fungsi predikat | dimana | Dimana |
OfType | Memfilter nilai berdasarkan kemampuannya untuk menjadi tipe yang ditentukan | Tak dapat diterapkan | Tak dapat diterapkan |
Bergabunglah dengan Operator
Bergabung mengacu pada operasi di mana sumber data dengan hubungan yang sulit diikuti satu sama lain secara langsung ditargetkan.
Tunjukkan Contoh
Operator | Deskripsi | C # Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
Ikuti | Operator menggabungkan dua urutan berdasarkan kunci yang cocok | bergabung… dalam… pada… sama dengan… | Dari x In…, y In… Dimana xa = ya |
GroupJoin | Bergabunglah dengan dua urutan dan kelompokkan elemen yang cocok | bergabung… dalam… pada… sama… menjadi… | Gabung Grup… Masuk… Pada… |
Operasi Proyeksi
Proyeksi adalah operasi di mana suatu objek diubah menjadi bentuk yang sama sekali baru dengan hanya properti tertentu.
Tunjukkan Contoh
Operator | Deskripsi | C # Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
Pilih | Operator memproyeksikan nilai berdasarkan fungsi transformasi | Pilih | Pilih |
SelectMany | Operator memproyeksikan urutan nilai yang didasarkan pada fungsi transformasi serta meratakannya menjadi satu urutan | Gunakan beberapa dari klausa | Gunakan beberapa klausa Dari |
Operator Penyortiran
Operasi pengurutan memungkinkan pengurutan elemen urutan berdasarkan satu atau lebih atribut.
Tunjukkan Contoh
Operator | Deskripsi | C # Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
Dipesan oleh | Operator mengurutkan nilai dalam urutan menaik | dipesan oleh | Dipesan oleh |
OrderByDescending | Operator mengurutkan nilai dalam urutan menurun | orderby ... turun | Order By ... Menurun |
Lalu | Menjalankan pengurutan sekunder dalam urutan naik | dipesan oleh …, … | Dipesan oleh …, … |
ThenByDescending | Menjalankan pengurutan sekunder dalam urutan menurun | orderby…,… turun | Diurutkan Berdasarkan…,… Menurun |
Balik | Melakukan pembalikan urutan elemen dalam koleksi | Tak dapat diterapkan | Tak dapat diterapkan |
Operator Pengelompokan
Operator memasukkan data ke dalam beberapa kelompok berdasarkan atribut bersama yang umum.
Tunjukkan Contoh
Operator | Deskripsi | C # Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
GroupBy | Atur urutan item dalam kelompok dan kembalikan sebagai koleksi IEnumerable dari tipe IGrouping <key, element> | kelompok… menurut -atau- kelompok… menurut… menjadi… | Kelompokkan… Oleh… Ke… |
Untuk mencari | Jalankan operasi pengelompokan di mana urutan pasangan kunci dikembalikan | Tak dapat diterapkan | Tak dapat diterapkan |
Konversi
Operator mengubah jenis objek input dan digunakan dalam berbagai aplikasi.
Tunjukkan Contoh
Operator | Deskripsi | C # Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
AsEnumerable | Mengembalikan input yang diketik sebagai IEnumerable <T> | Tak dapat diterapkan | Tak dapat diterapkan |
Dapat Dibayar | A (generik) IEnumerable diubah menjadi IQuerizable (generik) | Tak dapat diterapkan | Tak dapat diterapkan |
Pemeran | Melakukan casting elemen koleksi ke jenis tertentu | Gunakan variabel rentang yang diketik secara eksplisit. Misalnya: dari string str dalam kata-kata | Dari… Sebagai… |
OfType | Memfilter nilai berdasarkan nilainya, bergantung pada kemampuannya untuk dilemparkan ke jenis tertentu | Tak dapat diterapkan | Tak dapat diterapkan |
ToArray | Memaksa eksekusi kueri dan melakukan konversi koleksi menjadi array | Tak dapat diterapkan | Tak dapat diterapkan |
ToDictionary | Berdasarkan fungsi pemilih kunci, setel elemen ke dalam Dictionary <TKey, TValue> dan memaksa eksekusi kueri LINQ | Tak dapat diterapkan | Tak dapat diterapkan |
ToList | Memaksa eksekusi kueri dengan mengonversi koleksi menjadi Daftar <T> | Tak dapat diterapkan | Tak dapat diterapkan |
Untuk mencari | Memaksa eksekusi kueri dan memasukkan elemen ke dalam Lookup <TKey, TElement> berdasarkan fungsi pemilih kunci | Tak dapat diterapkan | Tak dapat diterapkan |
Rangkaian
Melakukan penggabungan dua urutan dan sangat mirip dengan operator Union dalam hal pengoperasiannya kecuali fakta bahwa ini tidak menghapus duplikat.
Tunjukkan Contoh
Operator | Deskripsi | C # Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
Concat | Dua urutan digabungkan untuk pembentukan satu urutan tunggal. | Tak dapat diterapkan | Tak dapat diterapkan |
Pengumpulan
Melakukan semua jenis agregasi yang diinginkan dan memungkinkan pembuatan agregasi kustom di LINQ.
Tunjukkan Contoh
Operator | Deskripsi | C # Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
Agregat | Beroperasi pada nilai koleksi untuk melakukan operasi agregasi kustom | Tak dapat diterapkan | Tak dapat diterapkan |
Rata-rata | Nilai rata-rata kumpulan nilai dihitung | Tak dapat diterapkan | Agregat… Dalam… Ke Rata-Rata () |
Menghitung | Menghitung elemen yang memenuhi fungsi predikat dalam koleksi | Tak dapat diterapkan | Agregat… Dalam… Ke Hitungan () |
LonCount | Menghitung elemen yang memenuhi fungsi predikat dalam koleksi besar | Tak dapat diterapkan | Agregat… Dalam… Ke LongCount () |
Max | Temukan nilai maksimum dalam sebuah koleksi | Tak dapat diterapkan | Agregat… Dalam… Ke Max () |
Min | Cari tahu nilai minimum yang ada dalam koleksi | Tak dapat diterapkan | Agregat… Dalam… Ke Min () |
Jumlah | Cari tahu jumlah nilai dalam koleksi | Tak dapat diterapkan | Agregat… In… Into Sum () |
Operasi Pengukur
Operator ini mengembalikan nilai Boolean yaitu True atau False ketika beberapa atau semua elemen dalam suatu urutan memenuhi kondisi tertentu.
Tunjukkan Contoh
Operator | Deskripsi | C # Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
Semua | Mengembalikan nilai 'True' jika semua elemen urutan memenuhi kondisi predikat | Tak dapat diterapkan | Gabungkan… Dalam… Ke Semua (…) |
Apa saja | Menentukan dengan mencari urutan apakah ada elemen yang sama memenuhi kondisi tertentu | Tak dapat diterapkan | Agregat… Dalam… Ke Apa Saja () |
Mengandung | Mengembalikan nilai 'True' jika menemukan bahwa elemen tertentu ada di sana dalam urutan jika urutan tidak berisi elemen spesifik itu, nilai 'salah' dikembalikan | Tak dapat diterapkan | Tak dapat diterapkan |
Operator Partisi
Bagilah urutan masukan menjadi dua bagian terpisah tanpa mengatur ulang elemen urutan dan mengembalikan salah satunya.
Tunjukkan Contoh
Operator | Deskripsi | C # Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
Melewatkan | Melewati beberapa elemen dalam urutan tertentu dan mengembalikan elemen yang tersisa | Tak dapat diterapkan | Melewatkan |
SkipWhile | Sama seperti Skip dengan satu-satunya pengecualian bahwa jumlah elemen yang dilewati ditentukan oleh kondisi Boolean | Tak dapat diterapkan | Lewati Sementara |
Mengambil | Ambil sejumlah elemen tertentu dari sebuah urutan dan lewati elemen yang tersisa | Tak dapat diterapkan | Mengambil |
TakeWhile | Sama seperti Take kecuali fakta bahwa jumlah elemen yang akan diambil ditentukan oleh kondisi Boolean | Tak dapat diterapkan | Take While |
Operasi Pembangkitan
Urutan nilai baru dibuat oleh operator generasi.
Tunjukkan Contoh
Operator | Deskripsi | C # Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
DefaultIfEmpty | Saat diterapkan ke urutan kosong, buat elemen default dalam urutan | Tak dapat diterapkan | Tak dapat diterapkan |
Kosong | Mengembalikan urutan nilai kosong dan merupakan operator generasi paling sederhana | Tak dapat diterapkan | Tak dapat diterapkan |
Jarak | Menghasilkan koleksi yang memiliki urutan bilangan bulat atau angka | Tak dapat diterapkan | Tak dapat diterapkan |
Ulang | Menghasilkan urutan yang berisi nilai berulang dengan panjang tertentu | Tak dapat diterapkan | Tak dapat diterapkan |
Atur Operasi
Ada empat operator untuk operasi yang ditetapkan, masing-masing memberikan hasil berdasarkan kriteria yang berbeda.
Tunjukkan Contoh
Operator | Deskripsi | C # Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
Berbeda | Menghasilkan daftar nilai unik dari koleksi dengan memfilter data duplikat jika ada | Tak dapat diterapkan | Berbeda |
Kecuali | Membandingkan nilai dua koleksi dan mengembalikan nilai dari satu koleksi yang tidak ada di koleksi lainnya | Tak dapat diterapkan | Tak dapat diterapkan |
Memotong | Mengembalikan kumpulan nilai yang ditemukan identik dalam dua koleksi terpisah | Tak dapat diterapkan | Tak dapat diterapkan |
Persatuan | Menggabungkan konten dari dua koleksi berbeda menjadi satu daftar yang juga tanpa konten duplikat | Tak dapat diterapkan | Tak dapat diterapkan |
Persamaan
Membandingkan dua kalimat (dapat dihitung) dan menentukan apakah keduanya sama persis atau tidak.
Tunjukkan Contoh
Operator | Deskripsi | C # Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
SequenceEqual | Menghasilkan nilai Boolean jika dua urutan ditemukan identik satu sama lain | Tak dapat diterapkan | Tak dapat diterapkan |
Operator Elemen
Kecuali DefaultIfEmpty, delapan operator elemen kueri standar lainnya mengembalikan satu elemen dari koleksi.
Tunjukkan Contoh
Operator | Deskripsi | C # Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
ElementAt | Mengembalikan elemen yang ada dalam indeks tertentu dalam koleksi | Tak dapat diterapkan | Tak dapat diterapkan |
ElementAtOrDefault | Sama seperti ElementAt kecuali fakta bahwa ia juga mengembalikan nilai default jika indeks tertentu berada di luar jangkauan | Tak dapat diterapkan | Tak dapat diterapkan |
Pertama | Mengambil elemen pertama dalam koleksi atau elemen pertama yang memenuhi kondisi tertentu | Tak dapat diterapkan | Tak dapat diterapkan |
FirstOrDefault | Sama seperti First kecuali fakta bahwa ia juga mengembalikan nilai default jika tidak ada elemen seperti itu | Tak dapat diterapkan | Tak dapat diterapkan |
Terakhir | Mengambil elemen terakhir yang ada dalam koleksi atau elemen terakhir yang memenuhi kondisi tertentu | Tak dapat diterapkan | Tak dapat diterapkan |
LastOrDefault | Sama seperti Last kecuali fakta bahwa ia juga mengembalikan nilai default jika tidak ada elemen seperti itu | Tak dapat diterapkan | Tak dapat diterapkan |
Tunggal | Mengembalikan elemen tunggal dari koleksi atau elemen tunggal yang memenuhi kondisi tertentu | Tak dapat diterapkan | Tak dapat diterapkan |
SingleOrDefault | Sama seperti Single kecuali itu juga mengembalikan nilai default jika tidak ada keberadaan elemen tunggal tersebut | Tak dapat diterapkan | Tak dapat diterapkan |
DefaultIfEmpty | Mengembalikan nilai default jika koleksi atau daftar kosong atau nol | Tak dapat diterapkan | Tak dapat diterapkan |
LINQ to SQL menawarkan infrastruktur (run-time) untuk pengelolaan data relasional sebagai objek. Ini adalah komponen versi 3.5 dari .NETFramework dan mampu menerjemahkan kueri bahasa terintegrasi dari model objek ke SQL. Query ini kemudian dikirim ke database untuk dieksekusi. Setelah mendapatkan hasil dari database, LINQ ke SQL lagi menerjemahkannya ke objek.
Pengenalan LINQ ke SQL
Untuk sebagian besar pengembang ASP.NET, LINQ to SQL (juga dikenal sebagai DLINQ) adalah bagian yang menggetarkan dari Language Integrated Query karena ini memungkinkan kueri data dalam database server SQL dengan menggunakan ekspresi LINQ biasa. Ini juga memungkinkan untuk memperbarui, menghapus, dan menyisipkan data, tetapi satu-satunya kelemahan yang dideritanya adalah keterbatasannya pada database server SQL. Namun, ada banyak manfaat LINQ untuk SQL dibandingkan ADO.NET seperti kompleksitas yang berkurang, beberapa baris pengkodean, dan banyak lagi.
Di bawah ini adalah diagram yang menunjukkan arsitektur eksekusi LINQ ke SQL.
Bagaimana cara menggunakan LINQ ke SQL?
Step 1- Buat "Koneksi Data" baru dengan server database. Lihat & arrar; Penjelajah Server & arrar; Koneksi Data & arrar; Tambahkan Koneksi
Step 2 - Tambahkan LINQ Ke file kelas SQL
Step 3 - Pilih tabel dari database dan seret dan lepas ke file kelas LINQ ke SQL yang baru.
Step 4 - Menambahkan tabel ke file kelas.
Membuat kueri dengan LINQ ke SQL
Aturan untuk mengeksekusi kueri dengan LINQ ke SQL mirip dengan kueri LINQ standar, yaitu kueri dieksekusi baik ditangguhkan atau langsung. Ada berbagai komponen yang berperan dalam eksekusi kueri dengan LINQ ke SQL dan ini adalah yang berikut ini.
LINQ to SQL API - meminta eksekusi kueri atas nama aplikasi dan mengirimkannya ke LINQ ke SQL Provider.
LINQ to SQL Provider - mengonversi kueri menjadi Transact SQL (T-SQL) dan mengirimkan kueri baru ke Penyedia ADO untuk dieksekusi.
ADO Provider - Setelah eksekusi kueri, kirim hasilnya dalam bentuk DataReader ke LINQ ke SQL Provider yang selanjutnya akan mengubahnya menjadi bentuk objek pengguna.
Perlu dicatat bahwa sebelum menjalankan kueri LINQ ke SQL, penting untuk menyambungkan ke sumber data melalui kelas DataContext.
Sisipkan, Perbarui dan Hapus menggunakan LINQ To SQL
Tambahkan ATAU Sisipkan
C#
using System;
using System.Linq;
namespace LINQtoSQL {
class LinqToSQLCRUD {
static void Main(string[] args) {
string connectString = System.Configuration.ConfigurationManager.ConnectionStrings["LinqToSQLDBConnectionString"].ToString();
LinqToSQLDataContext db = new LinqToSQLDataContext(connectString);
//Create new Employee
Employee newEmployee = new Employee();
newEmployee.Name = "Michael";
newEmployee.Email = "[email protected]";
newEmployee.ContactNo = "343434343";
newEmployee.DepartmentId = 3;
newEmployee.Address = "Michael - USA";
//Add new Employee to database
db.Employees.InsertOnSubmit(newEmployee);
//Save changes to Database.
db.SubmitChanges();
//Get new Inserted Employee
Employee insertedEmployee = db.Employees.FirstOrDefault(e ⇒e.Name.Equals("Michael"));
Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3}, Address = {4}",
insertedEmployee.EmployeeId, insertedEmployee.Name, insertedEmployee.Email,
insertedEmployee.ContactNo, insertedEmployee.Address);
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey();
}
}
}
VB
Module Module1
Sub Main()
Dim connectString As String = System.Configuration.ConfigurationManager.ConnectionStrings("LinqToSQLDBConnectionString").ToString()
Dim db As New LinqToSQLDataContext(connectString)
Dim newEmployee As New Employee()
newEmployee.Name = "Michael"
newEmployee.Email = "[email protected]"
newEmployee.ContactNo = "343434343"
newEmployee.DepartmentId = 3
newEmployee.Address = "Michael - USA"
db.Employees.InsertOnSubmit(newEmployee)
db.SubmitChanges()
Dim insertedEmployee As Employee = db.Employees.FirstOrDefault(Function(e) e.Name.Equals("Michael"))
Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3},
Address = {4}", insertedEmployee.EmployeeId, insertedEmployee.Name,
insertedEmployee.Email, insertedEmployee.ContactNo, insertedEmployee.Address)
Console.WriteLine(vbLf & "Press any key to continue.")
Console.ReadKey()
End Sub
End Module
Ketika kode C # atau VB di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Emplyee ID = 4, Name = Michael, Email = [email protected], ContactNo =
343434343, Address = Michael - USA
Press any key to continue.
Memperbarui
C#
using System;
using System.Linq;
namespace LINQtoSQL {
class LinqToSQLCRUD {
static void Main(string[] args) {
string connectString = System.Configuration.ConfigurationManager.ConnectionStrings["LinqToSQLDBConnectionString"].ToString();
LinqToSQLDataContext db = new LinqToSQLDataContext(connectString);
//Get Employee for update
Employee employee = db.Employees.FirstOrDefault(e =>e.Name.Equals("Michael"));
employee.Name = "George Michael";
employee.Email = "[email protected]";
employee.ContactNo = "99999999";
employee.DepartmentId = 2;
employee.Address = "Michael George - UK";
//Save changes to Database.
db.SubmitChanges();
//Get Updated Employee
Employee updatedEmployee = db.Employees.FirstOrDefault(e ⇒e.Name.Equals("George Michael"));
Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3}, Address = {4}",
updatedEmployee.EmployeeId, updatedEmployee.Name, updatedEmployee.Email,
updatedEmployee.ContactNo, updatedEmployee.Address);
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey();
}
}
}
VB
Module Module1
Sub Main()
Dim connectString As String = System.Configuration.ConfigurationManager.ConnectionStrings("LinqToSQLDBConnectionString").ToString()
Dim db As New LinqToSQLDataContext(connectString)
Dim employee As Employee = db.Employees.FirstOrDefault(Function(e) e.Name.Equals("Michael"))
employee.Name = "George Michael"
employee.Email = "[email protected]"
employee.ContactNo = "99999999"
employee.DepartmentId = 2
employee.Address = "Michael George - UK"
db.SubmitChanges()
Dim updatedEmployee As Employee = db.Employees.FirstOrDefault(Function(e) e.Name.Equals("George Michael"))
Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3},
Address = {4}", updatedEmployee.EmployeeId, updatedEmployee.Name,
updatedEmployee.Email, updatedEmployee.ContactNo, updatedEmployee.Address)
Console.WriteLine(vbLf & "Press any key to continue.")
Console.ReadKey()
End Sub
End Module
Ketika kode C # atau Vb di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Emplyee ID = 4, Name = George Michael, Email = [email protected], ContactNo =
999999999, Address = Michael George - UK
Press any key to continue.
Menghapus
C#
using System;
using System.Linq;
namespace LINQtoSQL {
class LinqToSQLCRUD {
static void Main(string[] args) {
string connectString = System.Configuration.ConfigurationManager.ConnectionStrings["LinqToSQLDBConnectionString"].ToString();
LinqToSQLDataContext db = newLinqToSQLDataContext(connectString);
//Get Employee to Delete
Employee deleteEmployee = db.Employees.FirstOrDefault(e ⇒e.Name.Equals("George Michael"));
//Delete Employee
db.Employees.DeleteOnSubmit(deleteEmployee);
//Save changes to Database.
db.SubmitChanges();
//Get All Employee from Database
var employeeList = db.Employees;
foreach (Employee employee in employeeList) {
Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3}",
employee.EmployeeId, employee.Name, employee.Email, employee.ContactNo);
}
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey();
}
}
}
VB
Module Module1
Sub Main()
Dim connectString As String = System.Configuration.ConfigurationManager.ConnectionStrings("LinqToSQLDBConnectionString").ToString()
Dim db As New LinqToSQLDataContext(connectString)
Dim deleteEmployee As Employee = db.Employees.FirstOrDefault(Function(e) e.Name.Equals("George Michael"))
db.Employees.DeleteOnSubmit(deleteEmployee)
db.SubmitChanges()
Dim employeeList = db.Employees
For Each employee As Employee In employeeList
Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3}",
employee.EmployeeId, employee.Name, employee.Email, employee.ContactNo)
Next
Console.WriteLine(vbLf & "Press any key to continue.")
Console.ReadKey()
End Sub
End Module
Ketika kode C # atau VB di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Emplyee ID = 1, Name = William, Email = [email protected], ContactNo = 999999999
Emplyee ID = 2, Name = Miley, Email = [email protected], ContactNo = 999999999
Emplyee ID = 3, Name = Benjamin, Email = [email protected], ContactNo =
Press any key to continue.
LINQ ke Objek menawarkan penggunaan kueri LINQ apa pun yang mendukung IEnumerable <T> untuk mengakses koleksi data dalam memori tanpa memerlukan penyedia LINQ (API) seperti LINQ ke SQL atau LINQ ke XML.
Pengenalan LINQ ke Objek
Query dalam LINQ to Objects mengembalikan variabel tipe biasanya hanya IEnumerable <T>. Singkatnya, LINQ to Objects menawarkan pendekatan baru untuk koleksi seperti sebelumnya, sangat penting untuk menulis pengkodean yang panjang (untuk setiap loop dengan banyak kompleksitas) untuk pengambilan data dari koleksi yang sekarang diganti dengan menulis kode deklaratif yang dengan jelas menggambarkan data yang diinginkan yang diperlukan untuk mengambil.
Ada juga banyak keuntungan LINQ ke Objek dibandingkan loop foreach tradisional seperti lebih mudah dibaca, pemfilteran yang kuat, kemampuan pengelompokan, pengurutan yang ditingkatkan dengan pengkodean aplikasi minimal. Kueri LINQ semacam itu juga lebih ringkas dan portabel ke sumber data lain tanpa modifikasi apa pun atau hanya dengan sedikit modifikasi.
Di bawah ini adalah contoh LINQ to Objects sederhana -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQtoObjects {
class Program {
static void Main(string[] args) {
string[] tools = { "Tablesaw", "Bandsaw", "Planer", "Jointer", "Drill", "Sander" };
var list = from t in tools select t;
StringBuilder sb = new StringBuilder();
foreach (string s in list) {
sb.Append(s + Environment.NewLine);
}
Console.WriteLine(sb.ToString(), "Tools");
Console.ReadLine();
}
}
}
Dalam contoh, larik string (alat) digunakan sebagai kumpulan objek yang akan ditanyakan menggunakan LINQ ke Objek.
Objects query is:
var list = from t in tools select t;
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Tablesaw
Bandsaw
Planer
Jointer
Drill
Sander
Membuat Kueri dalam Koleksi Memori Menggunakan LINQ ke Objek
C #
using System;
using System.Collections.Generic;
using System.Linq;
namespace LINQtoObjects {
class Department {
public int DepartmentId { get; set; }
public string Name { get; set; }
}
class LinqToObjects {
static void Main(string[] args) {
List<Department> departments = new List<Department>();
departments.Add(new Department { DepartmentId = 1, Name = "Account" });
departments.Add(new Department { DepartmentId = 2, Name = "Sales" });
departments.Add(new Department { DepartmentId = 3, Name = "Marketing" });
var departmentList = from d in departments
select d;
foreach (var dept in departmentList) {
Console.WriteLine("Department Id = {0} , Department Name = {1}",
dept.DepartmentId, dept.Name);
}
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey();
}
}
}
VB
Imports System.Collections.Generic
Imports System.Linq
Module Module1
Sub Main(ByVal args As String())
Dim account As New Department With {.Name = "Account", .DepartmentId = 1}
Dim sales As New Department With {.Name = "Sales", .DepartmentId = 2}
Dim marketing As New Department With {.Name = "Marketing", .DepartmentId = 3}
Dim departments As New System.Collections.Generic.List(Of Department)(New Department() {account, sales, marketing})
Dim departmentList = From d In departments
For Each dept In departmentList
Console.WriteLine("Department Id = {0} , Department Name = {1}", dept.DepartmentId, dept.Name)
Next
Console.WriteLine(vbLf & "Press any key to continue.")
Console.ReadKey()
End Sub
Class Department
Public Property Name As String
Public Property DepartmentId As Integer
End Class
End Module
Ketika kode C # atau VB di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Department Id = 1, Department Name = Account
Department Id = 2, Department Name = Sales
Department Id = 3, Department Name = Marketing
Press any key to continue.
Dataset menawarkan representasi data yang sangat berguna dalam memori dan digunakan untuk berbagai aplikasi berbasis data. LINQ ke Dataset sebagai salah satu teknologi LINQ ke ADO. NET memfasilitasi melakukan kueri pada data Dataset dengan cara yang tidak merepotkan dan meningkatkan produktivitas.
Pengenalan LINQ ke Set Data
LINQ ke Dataset telah membuat tugas kueri menjadi sederhana bagi para pengembang. Mereka tidak perlu menulis kueri dalam bahasa kueri tertentu, tetapi hal yang sama dapat ditulis dalam bahasa pemrograman. LINQ ke Kumpulan Data juga dapat digunakan untuk membuat kueri tempat data dikonsolidasikan dari beberapa sumber data. Ini juga tidak memerlukan penyedia LINQ seperti LINQ ke SQL dan LINQ ke XML untuk mengakses data dari dalam koleksi memori.
Di bawah ini adalah contoh sederhana dari kueri LINQ ke Dataset di mana sumber data diperoleh terlebih dahulu, kemudian kumpulan data tersebut diisi dengan dua tabel data. Hubungan dibuat antara tabel dan kueri LINQ dibuat terhadap kedua tabel dengan menggunakan klausa gabungan. Akhirnya, foreach loop digunakan untuk menampilkan hasil yang diinginkan.
C #
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LINQtoDataset {
class Program {
static void Main(string[] args) {
string connectString = System.Configuration.ConfigurationManager.ConnectionStrings["LinqToSQLDBConnectionString"].ToString();
string sqlSelect = "SELECT * FROM Department;" + "SELECT * FROM Employee;";
// Create the data adapter to retrieve data from the database
SqlDataAdapter da = new SqlDataAdapter(sqlSelect, connectString);
// Create table mappings
da.TableMappings.Add("Table", "Department");
da.TableMappings.Add("Table1", "Employee");
// Create and fill the DataSet
DataSet ds = new DataSet();
da.Fill(ds);
DataRelation dr = ds.Relations.Add("FK_Employee_Department",
ds.Tables["Department"].Columns["DepartmentId"],
ds.Tables["Employee"].Columns["DepartmentId"]);
DataTable department = ds.Tables["Department"];
DataTable employee = ds.Tables["Employee"];
var query = from d in department.AsEnumerable()
join e in employee.AsEnumerable()
on d.Field<int>("DepartmentId") equals
e.Field<int>("DepartmentId")
select new {
EmployeeId = e.Field<int>("EmployeeId"),
Name = e.Field<string>("Name"),
DepartmentId = d.Field<int>("DepartmentId"),
DepartmentName = d.Field<string>("Name")
};
foreach (var q in query) {
Console.WriteLine("Employee Id = {0} , Name = {1} , Department Name = {2}",
q.EmployeeId, q.Name, q.DepartmentName);
}
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey();
}
}
}
VB
Imports System.Data.SqlClient
Imports System.Linq
Module LinqToDataSet
Sub Main()
Dim connectString As String = System.Configuration.ConfigurationManager.ConnectionStrings("LinqToSQLDBConnectionString").ToString()
Dim sqlSelect As String = "SELECT * FROM Department;" + "SELECT * FROM Employee;"
Dim sqlCnn As SqlConnection = New SqlConnection(connectString)
sqlCnn.Open()
Dim da As New SqlDataAdapter
da.SelectCommand = New SqlCommand(sqlSelect, sqlCnn)
da.TableMappings.Add("Table", "Department")
da.TableMappings.Add("Table1", "Employee")
Dim ds As New DataSet()
da.Fill(ds)
Dim dr As DataRelation = ds.Relations.Add("FK_Employee_Department", ds.Tables("Department").Columns("DepartmentId"), ds.Tables("Employee").Columns("DepartmentId"))
Dim department As DataTable = ds.Tables("Department")
Dim employee As DataTable = ds.Tables("Employee")
Dim query = From d In department.AsEnumerable()
Join e In employee.AsEnumerable() On d.Field(Of Integer)("DepartmentId") Equals
e.Field(Of Integer)("DepartmentId")
Select New Person With { _
.EmployeeId = e.Field(Of Integer)("EmployeeId"),
.EmployeeName = e.Field(Of String)("Name"),
.DepartmentId = d.Field(Of Integer)("DepartmentId"),
.DepartmentName = d.Field(Of String)("Name")
}
For Each e In query
Console.WriteLine("Employee Id = {0} , Name = {1} , Department Name = {2}", e.EmployeeId, e.EmployeeName, e.DepartmentName)
Next
Console.WriteLine(vbLf & "Press any key to continue.")
Console.ReadKey()
End Sub
Class Person
Public Property EmployeeId As Integer
Public Property EmployeeName As String
Public Property DepartmentId As Integer
Public Property DepartmentName As String
End Class
End Module
Ketika kode C # atau VB di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Employee Id = 1, Name = William, Department Name = Account
Employee Id = 2, Name = Benjamin, Department Name = Account
Employee Id = 3, Name = Miley, Department Name = Sales
Press any key to continue.
Membuat Kueri Set Data menggunakan LinQ ke Set Data
Sebelum mulai membuat kueri Set Data menggunakan LINQ ke Set Data, sangat penting untuk memuat data ke Set Data dan ini dilakukan dengan menggunakan kelas DataAdapter atau dengan LINQ ke SQL. Perumusan kueri yang menggunakan LINQ ke Kumpulan Data sangat mirip dengan merumuskan kueri dengan menggunakan LINQ bersama sumber data lain yang mendukung LINQ.
Kueri Tabel Tunggal
Dalam kueri tabel tunggal berikut ini, semua pesanan online dikumpulkan dari SalesOrderHeaderTtable lalu ID pesanan, tanggal pesanan serta nomor pesanan ditampilkan sebagai output.
C#
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LinqToDataset {
class SingleTable {
static void Main(string[] args) {
string connectString = System.Configuration.ConfigurationManager.ConnectionStrings["LinqToSQLDBConnectionString"].ToString();
string sqlSelect = "SELECT * FROM Department;";
// Create the data adapter to retrieve data from the database
SqlDataAdapter da = new SqlDataAdapter(sqlSelect, connectString);
// Create table mappings
da.TableMappings.Add("Table", "Department");
// Create and fill the DataSet
DataSet ds = new DataSet();
da.Fill(ds);
DataTable department = ds.Tables["Department"];
var query = from d in department.AsEnumerable()
select new {
DepartmentId = d.Field<int>("DepartmentId"),
DepartmentName = d.Field<string>("Name")
};
foreach (var q in query) {
Console.WriteLine("Department Id = {0} , Name = {1}",
q.DepartmentId, q.DepartmentName);
}
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey();
}
}
}
VB
Imports System.Data.SqlClient
Imports System.Linq
Module LinqToDataSet
Sub Main()
Dim connectString As String = System.Configuration.ConfigurationManager.ConnectionStrings("LinqToSQLDBConnectionString").ToString()
Dim sqlSelect As String = "SELECT * FROM Department;"
Dim sqlCnn As SqlConnection = New SqlConnection(connectString)
sqlCnn.Open()
Dim da As New SqlDataAdapter
da.SelectCommand = New SqlCommand(sqlSelect, sqlCnn)
da.TableMappings.Add("Table", "Department")
Dim ds As New DataSet()
da.Fill(ds)
Dim department As DataTable = ds.Tables("Department")
Dim query = From d In department.AsEnumerable()
Select New DepartmentDetail With {
.DepartmentId = d.Field(Of Integer)("DepartmentId"),
.DepartmentName = d.Field(Of String)("Name")
}
For Each e In query
Console.WriteLine("Department Id = {0} , Name = {1}", e.DepartmentId, e.DepartmentName)
Next
Console.WriteLine(vbLf & "Press any key to continue.")
Console.ReadKey()
End Sub
Public Class DepartmentDetail
Public Property DepartmentId As Integer
Public Property DepartmentName As String
End Class
End Module
Ketika kode C # atau VB di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Department Id = 1, Name = Account
Department Id = 2, Name = Sales
Department Id = 3, Name = Pre-Sales
Department Id = 4, Name = Marketing
Press any key to continue.
LINQ ke XML menawarkan aksesibilitas yang mudah ke semua fungsi LINQ seperti operator kueri standar, antarmuka pemrograman, dll. Terintegrasi dalam kerangka .NET, LINQ ke XML juga memanfaatkan fungsionalitas kerangka kerja .NET terbaik seperti debugging, pemeriksaan waktu kompilasi, pengetikan yang kuat dan banyak lagi untuk dikatakan.
Pengenalan LINQ ke XML
Saat menggunakan LINQ ke XML, memuat dokumen XML ke dalam memori menjadi mudah dan lebih mudah adalah membuat kueri dan modifikasi dokumen. Dimungkinkan juga untuk menyimpan dokumen XML yang ada di memori ke disk dan menserialisasinya. Ini menghilangkan kebutuhan pengembang untuk mempelajari bahasa kueri XML yang agak rumit.
LINQ ke XML memiliki kekuatannya di namespace System.Xml.Linq. Ini memiliki semua 19 kelas yang diperlukan untuk bekerja dengan XML. Kelas-kelas ini adalah yang berikut.
- XAttribute
- XCData
- XComment
- XContainer
- XDeclaration
- XDocument
- XDocumentType
- XElement
- XName
- XNamespace
- XNode
- XNodeDocumentOrderComparer
- XNodeEqualityComparer
- XObject
- XObjectChange
- XObjectChangeEventArgs
- XObjectEventHandler
- XProcessingInstruction
- XText
Baca File XML menggunakan LINQ
C #
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
namespace LINQtoXML {
class ExampleOfXML {
static void Main(string[] args) {
string myXML = @"<Departments>
<Department>Account</Department>
<Department>Sales</Department>
<Department>Pre-Sales</Department>
<Department>Marketing</Department>
</Departments>";
XDocument xdoc = new XDocument();
xdoc = XDocument.Parse(myXML);
var result = xdoc.Element("Departments").Descendants();
foreach (XElement item in result) {
Console.WriteLine("Department Name - " + item.Value);
}
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey();
}
}
}
VB
Imports System.Collections.Generic
Imports System.Linq
Imports System.Xml.Linq
Module Module1
Sub Main(ByVal args As String())
Dim myXML As String = "<Departments>" & vbCr & vbLf &
"<Department>Account</Department>" & vbCr & vbLf &
"<Department>Sales</Department>" & vbCr & vbLf &
"<Department>Pre-Sales</Department>" & vbCr & vbLf &
"<Department>Marketing</Department>" & vbCr & vbLf &
"</Departments>"
Dim xdoc As New XDocument()
xdoc = XDocument.Parse(myXML)
Dim result = xdoc.Element("Departments").Descendants()
For Each item As XElement In result
Console.WriteLine("Department Name - " + item.Value)
Next
Console.WriteLine(vbLf & "Press any key to continue.")
Console.ReadKey()
End Sub
End Module
Ketika kode C # atau VB di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Department Name - Account
Department Name - Sales
Department Name - Pre-Sales
Department Name - Marketing
Press any key to continue.
Tambahkan Node Baru
C #
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
namespace LINQtoXML {
class ExampleOfXML {
static void Main(string[] args) {
string myXML = @"<Departments>
<Department>Account</Department>
<Department>Sales</Department>
<Department>Pre-Sales</Department>
<Department>Marketing</Department>
</Departments>";
XDocument xdoc = new XDocument();
xdoc = XDocument.Parse(myXML);
//Add new Element
xdoc.Element("Departments").Add(new XElement("Department", "Finance"));
//Add new Element at First
xdoc.Element("Departments").AddFirst(new XElement("Department", "Support"));
var result = xdoc.Element("Departments").Descendants();
foreach (XElement item in result) {
Console.WriteLine("Department Name - " + item.Value);
}
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey();
}
}
}
VB
Imports System.Collections.Generic
Imports System.Linq
Imports System.Xml.Linq
Module Module1
Sub Main(ByVal args As String())
Dim myXML As String = "<Departments>" & vbCr & vbLf &
"<Department>Account</Department>" & vbCr & vbLf &
"<Department>Sales</Department>" & vbCr & vbLf &
"<Department>Pre-Sales</Department>" & vbCr & vbLf &
"<Department>Marketing</Department>" & vbCr & vbLf &
"</Departments>"
Dim xdoc As New XDocument()
xdoc = XDocument.Parse(myXML)
xdoc.Element("Departments").Add(New XElement("Department", "Finance"))
xdoc.Element("Departments").AddFirst(New XElement("Department", "Support"))
Dim result = xdoc.Element("Departments").Descendants()
For Each item As XElement In result
Console.WriteLine("Department Name - " + item.Value)
Next
Console.WriteLine(vbLf & "Press any key to continue.")
Console.ReadKey()
End Sub
End Module
Ketika kode C # atau VB di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Department Name - Support
Department Name - Account
Department Name - Sales
Department Name - Pre-Sales
Department Name - Marketing
Department Name - Finance
Press any key to continue.
Menghapus Node Tertentu
C #
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
namespace LINQtoXML {
class ExampleOfXML {
static void Main(string[] args) {
string myXML = @"<Departments>
<Department>Support</Department>
<Department>Account</Department>
<Department>Sales</Department>
<Department>Pre-Sales</Department>
<Department>Marketing</Department>
<Department>Finance</Department>
</Departments>";
XDocument xdoc = new XDocument();
xdoc = XDocument.Parse(myXML);
//Remove Sales Department
xdoc.Descendants().Where(s =>s.Value == "Sales").Remove();
var result = xdoc.Element("Departments").Descendants();
foreach (XElement item in result) {
Console.WriteLine("Department Name - " + item.Value);
}
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey();
}
}
}
VB
Imports System.Collections.Generic
Imports System.Linq
Imports System.Xml.Linq
Module Module1
Sub Main(args As String())
Dim myXML As String = "<Departments>" & vbCr & vbLf &
"<Department>Support</Department>" & vbCr & vbLf &
"<Department>Account</Department>" & vbCr & vbLf &
"<Department>Sales</Department>" & vbCr & vbLf &
"<Department>Pre-Sales</Department>" & vbCr & vbLf &
"<Department>Marketing</Department>" & vbCr & vbLf &
"<Department>Finance</Department>" & vbCr & vbLf &
"</Departments>"
Dim xdoc As New XDocument()
xdoc = XDocument.Parse(myXML)
xdoc.Descendants().Where(Function(s) s.Value = "Sales").Remove()
Dim result = xdoc.Element("Departments").Descendants()
For Each item As XElement In result
Console.WriteLine("Department Name - " + item.Value)
Next
Console.WriteLine(vbLf & "Press any key to continue.")
Console.ReadKey()
End Sub
End Module
Ketika kode C # atau VB di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Department Name - Support
Department Name - Account
Department Name - Pre-Sales
Department Name - Marketing
Department Name - Finance
Press any key to continue.
Sebagai bagian dari Kerangka Kerja Entitas ADO.NET, LINQ ke Entitas lebih fleksibel daripada LINQ ke SQL, tetapi tidak begitu populer karena kompleksitas dan kurangnya fitur utama. Namun, LINQ ke SQL tidak memiliki batasan yang memungkinkan kueri data hanya dalam database server SQL karena LINQ ke Entitas memfasilitasi kueri data di sejumlah besar penyedia data seperti Oracle, MySQL, dll.
Selain itu, ia mendapat dukungan besar dari ASP.Net dalam arti bahwa pengguna dapat menggunakan kontrol sumber data untuk menjalankan kueri melalui LINQ ke Entitas dan memfasilitasi pengikatan hasil tanpa memerlukan pengkodean tambahan.
LINQ to Entities memiliki kelebihan ini menjadi mekanisme standar untuk penggunaan LINQ pada database saat ini. Juga dimungkinkan dengan LINQ ke Entitas untuk mengubah detail data yang ditanyakan dan melakukan pembaruan batch dengan mudah. Fakta paling menarik tentang LINQ to Entities adalah bahwa LINQ memiliki sintaks yang sama seperti SQL dan bahkan memiliki grup operator kueri standar yang sama seperti Gabung, Pilih, OrderBy, dll.
LINQ ke Entitas Query Proses Pembuatan dan Eksekusi
Pembangunan sebuah ObjectQuery contoh dari ObjectContext (Koneksi Entitas)
Menulis kueri baik di C # atau Visual Basic (VB) dengan menggunakan contoh yang baru dibangun
Konversi operator kueri standar LINQ serta ekspresi LINQ menjadi pohon perintah
Menjalankan kueri dengan meneruskan pengecualian apa pun yang dihadapi klien secara langsung
Kembali ke klien semua hasil kueri
ObjectContext di sini kelas utama yang memungkinkan interaksi dengan Entity Data Modelatau dengan kata lain berfungsi sebagai jembatan yang menghubungkan LINQ ke database. Pohon perintah di sini adalah representasi kueri dengan kompatibilitas dengan kerangka kerja Entitas.
Kerangka Entitas, di sisi lain, sebenarnya Object Relational Mapperdisingkat ORM secara umum oleh pengembang yang melakukan pembuatan objek bisnis serta entitas sesuai tabel database dan memfasilitasi berbagai operasi dasar seperti membuat, memperbarui, menghapus, dan membaca. Ilustrasi berikut menunjukkan kerangka entitas dan komponennya.
Contoh ADD, UPDATE, dan DELETE menggunakan LINQ dengan Entity Model
Pertama tambahkan Model Entitas dengan mengikuti langkah-langkah di bawah ini.
Step 1- Klik kanan pada proyek dan klik tambahkan item baru akan membuka jendela seperti di bawah ini. Pilih ADO.NET Entity Data Model dan tentukan nama dan klik Add.
Step 2 - Pilih Generate from database.
Step 3 - Pilih Koneksi Database dari menu drop-down.
Step 4 - Pilih semua tabel.
Sekarang tulis kode berikut.
using DataAccess;
using System;
using System.Linq;
namespace LINQTOSQLConsoleApp {
public class LinqToEntityModel {
static void Main(string[] args) {
using (LinqToSQLDBEntities context = new LinqToSQLDBEntities()) {
//Get the List of Departments from Database
var departmentList = from d in context.Departments
select d;
foreach (var dept in departmentList) {
Console.WriteLine("Department Id = {0} , Department Name = {1}",
dept.DepartmentId, dept.Name);
}
//Add new Department
DataAccess.Department department = new DataAccess.Department();
department.Name = "Support";
context.Departments.Add(department);
context.SaveChanges();
Console.WriteLine("Department Name = Support is inserted in Database");
//Update existing Department
DataAccess.Department updateDepartment = context.Departments.FirstOrDefault(d ⇒d.DepartmentId == 1);
updateDepartment.Name = "Account updated";
context.SaveChanges();
Console.WriteLine("Department Name = Account is updated in Database");
//Delete existing Department
DataAccess.Department deleteDepartment = context.Departments.FirstOrDefault(d ⇒d.DepartmentId == 3);
context.Departments.Remove(deleteDepartment);
context.SaveChanges();
Console.WriteLine("Department Name = Pre-Sales is deleted in Database");
//Get the Updated List of Departments from Database
departmentList = from d in context.Departments
select d;
foreach (var dept in departmentList) {
Console.WriteLine("Department Id = {0} , Department Name = {1}",
dept.DepartmentId, dept.Name);
}
}
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey();
}
}
}
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Istilah 'Ekspresi Lambda' mendapatkan namanya dari kalkulus 'lambda' yang pada gilirannya merupakan notasi matematika yang diterapkan untuk mendefinisikan fungsi. Ekspresi Lambda sebagai bagian yang dapat dieksekusi dari persamaan LINQ menerjemahkan logika dengan cara pada waktu proses sehingga dapat diteruskan ke sumber data dengan mudah. Namun, ekspresi lambda tidak hanya terbatas untuk menemukan aplikasi di LINQ saja.
Ekspresi ini diekspresikan oleh sintaks berikut -
(Input parameters) ⇒ Expression or statement block
Berikut adalah contoh ekspresi lambda -
y ⇒ y * y
Ekspresi di atas menetapkan parameter bernama y dan nilai y dikuadratkan. Namun, tidak mungkin mengeksekusi ekspresi lambda dalam formulir ini. Contoh ekspresi lambda di C # ditunjukkan di bawah ini.
C #
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace lambdaexample {
class Program {
delegate int del(int i);
static void Main(string[] args) {
del myDelegate = y ⇒ y * y;
int j = myDelegate(5);
Console.WriteLine(j);
Console.ReadLine();
}
}
}
VB
Module Module1
Private Delegate Function del(ByVal i As Integer) As Integer
Sub Main(ByVal args As String())
Dim myDelegate As del = Function(y) y * y
Dim j As Integer = myDelegate(5)
Console.WriteLine(j)
Console.ReadLine()
End Sub
End Module
Ketika kode C # atau VB di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
25
Ekspresi Lambda
Karena ekspresi dalam sintaks ekspresi lambda yang ditunjukkan di atas ada di sisi kanan, ini juga dikenal sebagai ekspresi lambda.
Async Lambdas
Ekspresi lambda yang dibuat dengan memasukkan pemrosesan asinkron dengan menggunakan kata kunci asinkron dikenal sebagai lambda asinkron. Di bawah ini adalah contoh lambda asinkron.
Func<Task<string>> getWordAsync = async()⇒ “hello”;
Lambda di Operator Kueri Standar
Ekspresi lambda dalam operator kueri dievaluasi dengan yang sama sesuai permintaan dan terus bekerja pada setiap elemen dalam urutan masukan dan bukan seluruh urutan. Pengembang diizinkan oleh ekspresi Lambda untuk memasukkan logikanya ke dalam operator kueri standar. Dalam contoh di bawah ini, pengembang telah menggunakan operator 'Di mana' untuk mendapatkan kembali nilai ganjil dari daftar yang diberikan dengan menggunakan ekspresi lambda.
C #
//Get the average of the odd Fibonacci numbers in the series...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace lambdaexample {
class Program {
static void Main(string[] args) {
int[] fibNum = { 1, 1, 2, 3, 5, 8, 13, 21, 34 };
double averageValue = fibNum.Where(num ⇒ num % 2 == 1).Average();
Console.WriteLine(averageValue);
Console.ReadLine();
}
}
}
VB
Module Module1
Sub Main()
Dim fibNum As Integer() = {1, 1, 2, 3, 5, 8, 13, 21, 34}
Dim averageValue As Double = fibNum.Where(Function(num) num Mod 2 = 1).Average()
Console.WriteLine(averageValue)
Console.ReadLine()
End Sub
End Module
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
7.33333333333333
Ketik Inferensi di Lambda
Dalam C #, inferensi tipe digunakan dengan nyaman dalam berbagai situasi dan itu juga tanpa menentukan tipe secara eksplisit. Namun dalam kasus ekspresi lambda, jenis inferensi hanya akan berfungsi jika setiap jenis telah ditentukan karena kompilator harus dipenuhi. Mari kita perhatikan contoh berikut.
delegate int Transformer (int i);
Di sini compiler menggunakan tipe inferensi untuk menggambarkan fakta bahwa x adalah integer dan ini dilakukan dengan memeriksa tipe parameter dari Transformer.
Lingkup Variabel dalam Ekspresi Lambda
Ada beberapa aturan saat menggunakan lingkup variabel dalam ekspresi lambda seperti variabel yang dimulai dalam ekspresi lambda tidak dimaksudkan untuk terlihat di metode luar. Ada juga aturan bahwa variabel yang ditangkap tidak boleh sampah dikumpulkan kecuali jika delegasi yang mereferensikan hal yang sama memenuhi syarat untuk tindakan pengumpulan sampah. Selain itu, ada aturan yang melarang pernyataan kembali dalam ekspresi lambda menyebabkan kembalinya metode pelingkupan.
Berikut adalah contoh untuk menunjukkan ruang lingkup variabel dalam ekspresi lambda.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace lambdaexample {
class Program {
delegate bool D();
delegate bool D2(int i);
class Test {
D del;
D2 del2;
public void TestMethod(int input) {
int j = 0;
// Initialize the delegates with lambda expressions.
// Note access to 2 outer variables.
// del will be invoked within this method.
del = () ⇒ { j = 10; return j > input; };
// del2 will be invoked after TestMethod goes out of scope.
del2 = (x) ⇒ { return x == j; };
// Demonstrate value of j:
// The delegate has not been invoked yet.
Console.WriteLine("j = {0}", j); // Invoke the delegate.
bool boolResult = del();
Console.WriteLine("j = {0}. b = {1}", j, boolResult);
}
static void Main() {
Test test = new Test();
test.TestMethod(5);
// Prove that del2 still has a copy of
// local variable j from TestMethod.
bool result = test.del2(10);
Console.WriteLine(result);
Console.ReadKey();
}
}
}
}
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
j = 0
j = 10. b = True
True
Pohon Ekspresi
Ekspresi lambda digunakan dalam Expression Treekonstruksi secara ekstensif. Pohon ekspresi memberikan kode dalam struktur data yang menyerupai pohon di mana setiap node merupakan ekspresi seperti pemanggilan metode atau dapat berupa operasi biner seperti x <y. Di bawah ini adalah contoh penggunaan ekspresi lambda untuk membangun pohon ekspresi.
Pernyataan Lambda
Ada juga statement lambdasterdiri dari dua atau tiga pernyataan, tetapi tidak digunakan dalam konstruksi pohon ekspresi. Pernyataan kembali harus ditulis dalam pernyataan lambda.
Sintaks pernyataan lambda
(params)⇒ {statements}
Contoh pernyataan lambda
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
namespace lambdaexample {
class Program {
static void Main(string[] args) {
int[] source = new[] { 3, 8, 4, 6, 1, 7, 9, 2, 4, 8 };
foreach (int i in source.Where(x ⇒
{
if (x <= 3)
return true;
else if (x >= 7)
return true;
return false;
}
))
Console.WriteLine(i);
Console.ReadLine();
}
}
}
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
3
8
1
7
9
2
8
Lambdas digunakan sebagai argumen dalam kueri LINQ berdasarkan metode dan tidak pernah diizinkan memiliki tempat di sisi kiri operator seperti is atau asseperti metode anonim. Meskipun, ekspresi Lambda sangat mirip dengan metode anonim, ini sama sekali tidak dibatasi untuk digunakan sebagai delegasi saja.
Poin yang perlu diingat saat menggunakan ekspresi lambda
Ekspresi lambda dapat mengembalikan nilai dan mungkin memiliki parameter.
Parameter dapat didefinisikan dalam berbagai cara dengan ekspresi lambda.
Jika ada pernyataan tunggal dalam ekspresi lambda, tidak perlu tanda kurung kurawal sedangkan jika ada beberapa pernyataan, tanda kurung kurawal serta nilai kembalian penting untuk ditulis.
Dengan ekspresi lambda, dimungkinkan untuk mengakses variabel yang ada di luar blok ekspresi lambda dengan fitur yang dikenal sebagai closure. Penggunaan penutup harus dilakukan dengan hati-hati untuk menghindari masalah.
Tidak mungkin untuk mengeksekusi kode yang tidak aman di dalam ekspresi lambda apa pun.
Ekspresi lambda tidak dimaksudkan untuk digunakan di sisi kiri operator.
Sebagai satu set ekstensi kerangka kerja .NET, LINQ adalah mekanisme yang disukai untuk akses data oleh pengembang ASP.NET. ASP.NET 3.5 memiliki alat kontrol LINQDataSource bawaan yang memungkinkan penggunaan LINQ dengan mudah di ASP.NET. ASP.NET menggunakan kontrol yang disebutkan di atas sebagai sumber data. Proyek kehidupan nyata sebagian besar mencakup situs web atau aplikasi windows dan untuk memahami lebih baik konsep LINQ dengan ASP.NET, mari kita mulai dengan membuat situs web ASP.NET yang menggunakan fitur LINQ.
Untuk ini, penting untuk menginstal Visual Studio dan .NET framework di sistem Anda. Setelah Anda membuka Visual Studio, buka File → New → Website. Jendela pop up akan terbuka seperti yang ditunjukkan pada gambar di bawah ini.
Sekarang, di bawah template di sisi kiri, akan ada dua pilihan bahasa untuk membuat website. MemilihVisual C# dan pilih ASP.NET Empty Web Site.
Pilih folder tempat Anda ingin menyimpan situs web baru di sistem Anda. Lalu tekanOK dan seterusnya Solution Explorermuncul di layar Anda yang berisi semua file web. Klik kanan pada Default.aspx di Solution Explorer dan pilih Lihat di Browser untuk melihat situs web ASP.NET default di browser. Segera situs web ASP.NET baru Anda akan terbuka di browser web, seperti yang ditunjukkan pada gambar layar berikut.
.aspx sebenarnya adalah ekstensi file utama yang digunakan di situs web ASP.NET. Visual Studio secara default membuat semua halaman yang diperlukan untuk situs web dasar sepertiHome page dan About Ushalaman tempat Anda dapat menempatkan konten Anda dengan nyaman. Kode untuk situs web dibuat secara otomatis di sini dan juga dapat dilihat.
Kontrol LINQDataSource
Apakah mungkin untuk UPDATE, INSERT dan DELETEdata di halaman situs web ASP.NET dengan bantuan kontrol LINQDataSource. Sama sekali tidak diperlukan spesifikasi perintah SQL karena kontrol LINQDataSource menggunakan perintah yang dibuat secara dinamis untuk operasi tersebut.
Kontrol memungkinkan pengguna untuk menggunakan LINQ di halaman web ASP.NET dengan nyaman dengan pengaturan properti di teks markup. LINQDataSource sangat mirip dengan kontrol sepertiSqlDataSource sebaik ObjectDataSourcekarena dapat digunakan dalam mengikat kontrol ASP.NET lain yang ada di halaman ke sumber data. Jadi, kita harus memiliki filedatabase untuk menjelaskan berbagai fungsi yang dipanggil oleh Kontrol LINQDataSource.
Sebelum memulai penjelasan penggunaan kontrol dalam formulir halaman web ASP.NET, penting untuk membuka Microsoft Visual Studio Toolbox dan drag dan drop kontrol LINQDataSource ke halaman .aspx situs web ASP.NET seperti gambar di bawah ini.
Langkah selanjutnya adalah mengkonfigurasi LINQDataSource dengan memilih semua kolom untuk catatan karyawan.
Sekarang tambahkan Kontrol GridView ke halaman .aspx dan konfigurasikan seperti yang ditunjukkan pada gambar di bawah ini. Kontrol GridView sangat kuat dan menawarkan fleksibilitas untuk bekerja dengan data. Segera setelah mengonfigurasi kontrol, itu akan muncul di browser.
Pengkodean yang sekarang dapat dilihat di layar Anda untuk halaman .aspx adalah -
<!DOCTYPE html>
<html>
<head runat = "server">
<title></title>
</head>
<body>
<form id = "form1" runat = "server">
<div>
<asp:GridView ID = "GridView1" runat = "server" AutoGenerateColumns = "False"
DataKeyNames = "ContactID" DataSourceID = "LINQDataSource1">
<Columns>
<asp:BoundField DataField = "ContactID" HeaderText = "ContactID"
InsertVisible = "False" ReadOnly="True" SortExpression = "ContactID" />
<asp:CheckBoxField DataField = "NameStyle" HeaderText = "NameStyle"
SortExpression = "NameStyle" />
<asp:BoundField DataField = "Title" HeaderText = "Title" SortExpression = "Title" />
<asp:BoundField DataField = "FirstName" HeaderText = "FirstName"
SortExpression="FirstName" />
<asp:BoundField DataField = "MiddleName" HeaderText = "MiddleName"
SortExpression = "MiddleName" />
<asp:BoundField DataField = "LastName" HeaderText = "LastName"
SortExpression = "LastName" />
<asp:BoundField DataField = "Suffix" HeaderText = "Suffix"
SortExpression = "Suffix" />
<asp:BoundField DataField = "EmailAddress" HeaderText = "EmailAddress"
SortExpression = "EmailAddress" />
</Columns>
</asp:GridView>
<br />
</div>
<asp:LINQDataSource ID = "LINQDataSource1" runat = "server"
ContextTypeName = "LINQWebApp1.AdventureWorksDataContext" EntityTypeName = ""
TableName = "Contacts">
</asp:LINQDataSource>
</form>
</body>
</html>
Di sini perlu dicatat bahwa sangat penting untuk mengatur properti ContextTypeName ke kelas yang mewakili database. Misalnya, ini diberikan sebagai LINQWebApp1.AdventureWorksDataContext karena tindakan ini akan membuat koneksi yang diperlukan antara LINQDataSource dan database.
INSERT, UPDATE, dan DELETE data di ASP.NET Page menggunakan LINQ
Setelah menyelesaikan semua langkah di atas dengan teliti, pilih LINQDataSource Tasks dari LINQDataSource Control dan pilih ketiga kotak untuk mengaktifkan penyisipan, aktifkan pembaruan dan aktifkan hapus dari yang sama, seperti yang ditunjukkan pada tangkapan layar berikut.
Segera markup deklaratif akan ditampilkan di layar Anda seperti yang berikut ini.
<asp:LINQDataSource
ContextTypeName = "LINQWebApp1.AdventureWorksDataContext"
TableName = "Contacts"
EnableUpdate = "true"
EnableInsert = "true"
EnableDelete = "true"
ID = "LINQDataSource1"
runat = "server">
</asp:LINQDataSource>
Sekarang karena ada beberapa baris dan kolom, lebih baik menambahkan kontrol lain pada formulir .aspx Anda yang dinamai sebagai Tampilan Detail atau kontrol Master di bawah kontrol Tampilan Kisi untuk hanya menampilkan detail baris kisi yang dipilih. Pilih Tugas Tampilan Detail dari kontrol Tampilan Detail dan pilih kotak centang seperti yang ditunjukkan di bawah ini.
Sekarang, cukup simpan perubahan dan tekan Ctrl + F5 untuk melihat halaman di browser Anda di mana sekarang dimungkinkan untuk menghapus, memperbarui, memasukkan catatan apa pun pada kontrol tampilan detail.