Languange Integrated Quey atau disingkat dengan LINQ adalah fitur baru yang ditambahkan pada .NET Framework 3.5 (Visual Studio 2008). Dengan menggunakan LINQ kita bisa mencari data (query) dari berbagai data source yang berbeda, yaitu Object, Database dan XML. Ada 3 jenis LINQ, yaitu :
- LINQ To Object
- LINQ To ADO.NET
LINQ To SQL adalah tool ORM yang dibuat oleh Microsoft yang dikhususkan untuk database SQL Server. Jika kita menggunakan database selain SQL Server (misalnya MySQL, PostgreSQL, Oracle, dll) maka kita dapat menggunakan Entity Framework.
Oya.., ORM itu apa ? :). ORM (Object Relational Mapping) adalah sebuah teknik pemrograman untuk mengkonversi data dari berbagai jenis Relational Database menjadi Object-object sebuah class pada Pemrograman Berorientasi Objek. Beberapa diantara sekian banyak tool-tool ORM antara lain : Entity Framework, LINQ to SQL, NHibernate, Dapper .NET dan lain-lain.
- LINQ To XML
Dua gambar di bawah ini menjelaskan tentang Arsitektur LINQ dan model eksekusi LINQ :
Arsitektur LINQ
Model Eksekusi LINQ
LINQ bekerja di atas bahasa pemrograman atau dengan kata lain pernyataan-pernyataan LINQ akan dikompilasi oleh compiler bahasa pemrograman yang mendukungnya. Hasil kompilasi pernyataan LINQ berupa Intermediate Language (IL) yang nantinya diterjemahkan oleh Common Language Runtime (CLR) untuk mengakses sumber data yang diinginkan.
Selanjutnya kita akan membahas satu persatu mengenai LINQ to Object, LINQ to XML dan LINQ to XML. Sebelum melanjutkan pembahasan ini, karena yang saya gunakan adalah Visual Studio 2008 maka ada beberapa hal yang terdapat pada Visual C# 3.0 (Visual Studio 2008) yang penting untuk kita ketahui yaitu :
Baris kode berikut ini (Deklarasi Variabel Lokal) :
Implicitly Typed Local Variables
Dapat juga dituliskan dengan :
Hmm..m, bagaimana menurut anda ?. Anda bingung ? he.he.., mudah-mudahan tidak. Jadi, dengan var, anda tidak perlu menyebutkan lagi tipe data variabel yang dideklarasikan, dengan syarat saat deklarasi variabel tersebut harus langsung diisi dengan nilai, maka compiler C# akan secara otomatis mendeteksi dan menentukan tipe data variabel tersebut.
Perlu diingat, anda tidak boleh melakukan hal berikut ini dalam deklarasi variabel dengan :
Kita juga dapat menerapkan Implicity Typed Local Variable pada statemen for, yang dikenal dengan for-initializer seperti contoh berikut :var x; // Error, no initializer to infer type from var y = {1, 2, 3}; // Error, collection initializer not permitted var z = null; // Error, null type not permitted var u = x => x + 1; // Error, lambda expressions do not have a type var v = v++; // Error, initializer cannot refer to variable itself
int[] numbers = { 1, 3, 5, 7, 9 }; foreach (var n in numbers) Console.WriteLine(n);
Catatan :
Deklarasi dari Implicitly Typed Local Variable hanya dapat digunakan untuk :
- local-variable-declaration
- resource-acquisition (using statement)
- for-initializer
- foreach-statement
Extension Methods dideklarasikan dengan cara menentukan keyword this sebagai sebuah modifier pada parameter pertama dari method. Extension Methods hanya dapat dideklarasikan di dalam class-class static non-generic, non-nested.Extension Methods
Buat project baru bertipe console application, kemudian di dalamnya buat class baru dengan nama Extension.cs :
Pada class utama (Program.cs), kita uji Extension Methods yang sudah kita buat :using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace contohExtensionMethod { public static class Extensions { public static int ToInt32(this string s) { return Int32.Parse(s); } public static T[] Slice<T>(this T[] source, int index, int count) { if (index < 0 || count < 0 || source.Length - index < count) { throw new ArgumentException(); } T[] result = new T[count]; Array.Copy(source, index, result, 0, count); return result; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace contohExtensionMethod { class Program { static void Main(string[] args) { string str = "1234"; int integ1 = Extensions.ToInt32(str); int integ2 = str.ToInt32(); //Sama dengan Extensions.ToInt32(str) int[] digits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int[] array1 = Extensions.Slice(digits, 4, 3); int[] array2 = digits.Slice(4, 3); //Sama dengan Extensions.Slice(digits, 4, 3) Console.WriteLine("Nilai integ1 = " + integ1.ToString()); Console.WriteLine("Nilai integ2 = " + integ2.ToString()); Console.WriteLine("\nNiali array1 = " + array1[1].ToString()); Console.WriteLine("Niali array2 = " + array2[1].ToString()); Console.WriteLine("\nTekan Enter untuk keluar..."); Console.ReadLine(); } } }
Buat project baru dengan nama Initializers, kemudian di dalamnya tambahkan sebuah class dengan nama ObjectInitializers, ketikkan kode berikut :Object And Collection Initializers
Sekarang kita uji coba Object Initializers, tuliskan kode program berikut di dalam class utama (Program.cs) :using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Initializers { public class ObjectInitializer { int x, y; public int X { get { return x; } set { x = value; } } public int Y { get { return y; } set { y = value; } } } }
Yang kedua, kita akan mencoba Collection Initializer :using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Initializers { class Program { static void Main(string[] args) { //Sebuah instance dari class ObjectInitializers, //dapat diciptakan dan di diinisialisasi seperti berikut var a = new ObjectInitializers { X = 0, Y = 1 }; //Sebuah instance dari class ObjectInitializers, juga //dapat diciptakan dan di diinisialisasi dengan cara berikut var _a = new ObjectInitializers(); _a.X = 0; _a.Y = 1; var b = _a; //Tampilkan hasilnya ke layar konsol Console.WriteLine("Nilai a = " + a.X.ToString()); Console.WriteLine("Nilai a = " + a.Y.ToString()); Console.WriteLine("\nNilai b = " + b.X.ToString()); Console.WriteLine("Nilai b = " + b.Y.ToString()); Console.WriteLine("\nTekan Enter untuk keluar..."); Console.ReadLine(); } } }
BERSAMBUNG....
Kode berikut ini :Automatically Implemented Properties
public class Jabatan { private string kode_Jabatan; public string Kode_Jabatan { get { return kode_Jabatan; } set { kode_Jabatan = value; } } private string nama_Jabatan; public string Nama_Jabatan { get { return nama_Jabatan; } set { nama_Jabatan = value; } } private int gaji_Pokok; public int Gaji_Pokok { get { return gaji_Pokok; } set { gaji_Pokok = value; } } private int tj_Jabatan; public int TJ_Jabatan { get { return tj_Jabatan; } set { tj_Jabatan = value; } } }
Bisa dituliskan dengan :
public class Jabatan { public string Kode_Jabatan { get; set; } public string Nama_Jabatan { get; set; } public int Gaji_Pokok { get; set; } public int TJ_Jabatan { get; set; } }
BERSAMBUNG....
sumber :
http://msdn.microsoft.com/en-us/library/bb308966.aspx
http://www.codeproject.com/Articles/22700/C-3-0-New-Language-Features-Part-1
http://www.codeproject.com/Articles/23174/C-3-0-New-Language-Features-Part-2
Tidak ada komentar:
Posting Komentar