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 memilihFileSave 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 memilihFileSave 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.