LINQ - Ikhtisar

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. Ini adalah 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 secara singkat di bawah ini.

  • 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 run-time saat menjalankan kueri LINQ 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 keunggulan 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 mempermudah debugging 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 memungkinkan 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 dari satu tipe data ke tipe data lainnya seperti mengubah data SQL menjadi data XML.