Jumat, 21 Februari 2014

Languange Integrated Query (LINQ) Bag. 1

1. Pengenalan LINQ

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 Object adalah sekumpulan pustaka pemrograman yang mengandung sejumlah Standard Query Operators (SQO). LINQ To Object  digunakan untuk mencari data yang ada di dalam beberapa kumpulan object. Object ini dapat berupa Array, Collection atau Object Class.

  • LINQ To ADO.NET
LINQ to ADO.NET adalah sekumpulan pustaka pemrograman SQO yang memungkinkan komunikasi dengan basis data relasional. LINQ to ADO.NET terbagi lagi menjadi tiga bagian berdasar akses basis data yang diakses, yakni LINQ to SQL untuk pengaksesan ke SQL Server, LINQ to Dataset untuk melakukan query terhadap Datasets, dan LINQ to Entities yang memungkinkan akses LINQ dengan menggunakan objek bisnis.
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
LINQ to XML adalah sekumpulan pustaka pemrograman yang memungkinkan SQO bekerja dengan berkas 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 :

Implicitly Typed Local Variables

Baris kode berikut ini (Deklarasi Variabel Lokal) :
int i = 5;
string s = "Hello";
double d = 1.0;
int[] numbers = new int[] {1, 2, 3};
Dictionary<int,Order> orders = new Dictionary<int,Order>();
 
Dapat juga dituliskan dengan :
var i = 5;
var s = "Hello";
var d = 1.0;
var numbers = new int[] {1, 2, 3};
var orders = new Dictionary<int,Order>();

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 :
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
Kita juga dapat menerapkan Implicity Typed Local Variable pada statemen for, yang dikenal dengan for-initializer seperti contoh berikut :
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

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.

Buat project baru bertipe console application, kemudian di dalamnya buat class baru dengan nama Extension.cs :
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;
        }
    }
}
 
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
{
    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();
        }                
    }
}

Object And Collection Initializers

Buat project baru dengan nama Initializers, kemudian di dalamnya tambahkan sebuah class dengan nama ObjectInitializers, ketikkan kode berikut :
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; } 
        }
    }
}
 
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
{
    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();
 
        }
    }
}
Yang kedua, kita akan mencoba Collection Initializer :


BERSAMBUNG....

Automatically Implemented Properties

Kode berikut ini :
    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