Thursday, May 29, 2014

LINQ dalam bahasa pemograman C#

Setelah sebelumnya kita telah mempelajari tentang beberapa data collection yaitu list, queue, dan stack. Kali ini saatnya kita mempelajari tentang LINQ (Language Integrated Query). LINQ merupakan salah satu perkembangan dari .NET framework dalam melakukan query dari suatu kumpulan data. LINQ digunakan untuk melakukan penyeleksian dari sebuah kumpulan data.
Misalnya saya mempunya sebuah list bertipe int yang memiliki elemen bernilai dari 1 - 9, dengan menggunakan LINQ kita bisa menampilkan isi dari elemen list yang hanya merupakan bilangan ganjil saja. berarti yang akan tampil hanya bilangan 1, 3, 5, 7, dan 9.

Berikut ini adalah bentuk umum dari LINQ

from nama_penampung in nama_collection
where syarat pemeilihan
orderby nama_kategori_pengurutan ascending/descending
select nama_pilihan

nama_penampung adalah sebuatan yang kita berikan untuk menampun sebuah elemen dalam sebuah collection (list, queue, stack, dsb) yang ingin kita lakukan pemilihan. Syarat pemilihan adalah syarat yang ingin kita terapkan/ periksa terhadap setiap elemen collection ketika kita melakukan pemilihan. nama_kategori_pengurutan adalah nama elemen atau anggota elemen yang ingin dijadikan dasar dari sebuah pengurutan. ascending dan descending adalah mode pengurutan yang ingin kita terapkan. Ascending adalah pengurutan secara menaik, dan descending adalah pengurutan secara menurun. Nama pilihan adalah nama elemen atau nama anggota elemen yang ingin kita pilih.

Untuk lebih jelasnya silahkan amati contoh program berikut ini.
class Undian :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ContohLINQ
{
    class Undian
    {
        private int _noID;
        private string _nama;

        public int NoID
        {
            get { return _noID; }
        }

        public string Nama
        {
            get { return _nama; }
        }

        public Undian(int number, string nama)
        {
            _noID = number;
            _nama = nama;
        }

        public Undian()
        {
            _noID = 0;
            _nama = "noname";
        }
    }
}
Program utama :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ContohLINQ
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Undian> undian = new List<Undian>();

            undian.Add(new Undian(1, "Julia"));
            undian.Add(new Undian(2, "Diana"));
            undian.Add(new Undian(3, "Ririn"));
            undian.Add(new Undian(4, "Vina"));

            //menampilkan isi list
            foreach (Undian i in undian)
            {
                Console.WriteLine("No ID : {0}\nNama  : {1}", i.NoID, i.Nama);
                Console.WriteLine();
            }
            Console.WriteLine();

            //list untuk menampung int NoID
            List<int> noID;

            //LINQ hanya memilih NoID
            noID = (
                from no in undian
                select no.NoID
                ).ToList();

            foreach (int i in noID)
            {
                Console.WriteLine("No ID : {0}", i);
            }
            Console.WriteLine();

            //list untuk menampung string Nama
            List<string> nama;

            //LINQ hanya memilih Nama
            nama = (
                from n in undian
                select n.Nama
                ).ToList();

            foreach (string nam in nama)
            {
                Console.WriteLine("Nama : {0}", nam);
            }
            Console.WriteLine();

            //list untuk menampung objek Undian
            List<Undian> noGanjil;

            //LINQ hanya memilih objek berdasarkan NoID dengan no ganjil
            //dan di urutkan secara menurun
            noGanjil = (from nG in undian
                        where nG.NoID % 2 != 0
                        orderby nG.NoID descending
                        select nG).ToList();

            foreach (Undian i in noGanjil)
            {
                Console.WriteLine("No ID Ganjil : {0}\nNama : {1}", i.NoID, i.Nama);
                Console.WriteLine();
            }
        }
    }
}
Jika dijalankan hasilnya adalah sebagai berikut :