Senin, 24 Februari 2014

Language Integrated Query - Bagian 2

2. LINQ to Object

Setelah pada bagian pertama kita berkenalan dengan LINQ, sekarang saatnya kita membahas satu-persatu contoh cara menggunakan LINQ. Sebelumnya perhatikan 2 definisi dari LINQ to Object berikut ini :
  • LINQ to Object adalah sekumpulan pustaka pemrograman yang mengandung sejumlah Standard Query Operators (SQO). SQO membantu mekanisme pengambilan data dalam memory melalui mekanisme interface ala generik pada interface Ienumerable
  • LINQ to Object merupakan suatu konsep di mana kita menggunakan LINQ framework untuk mencari object dengan melakukan akses ke memory. Kita bisa mencari tipe data apa saja yang merupakan turunan dari Ienumerable<T>.
Baiklah, setelah sedikit intro dengan pengertian dari LINQ to Object, langsung saja kita membahas cara menggunakannya. Berikut akan ada 3 contoh yang akan saya berikan, dari yang mudah sampai yang agak sulit :).

Contoh 1 :
Buat sebuah Project dengan tipe Console Application baru dengan nama LINQtoObject1 :

Membuat Project Baru

Di dalam method Main, ketikkan kode berikut :
  • Pertama-tama kita membuat sebuah array bertipe string, kemudian kita mengisikan beberapa data ke dalamnya :
 string[] Jabatan = { "Manager Logistik", "Manager HRD", "Manager IT", "Senior HRD", "Senior IT", "Senior Logistik", "Satpam", "Direktur", "Wakil Direktur" };
  • Kemudian lakukan pencarian data dengan sintax LINQ. Karena tipe data yang akan di cari adalah berupa string, maka tentukan object pada IEnumerable dengan string :
IEnumerable<string> jabatanKry = from posisi in Jabatan where posisi.Contains("Manager") select posisi;
  • Sekilas sintax di atas mirip dengan perintah SQL (from, where dan select).
Kata Contains pada posisi.Contains(“Manager”), berarti kita akan mencari string yang mengandung kata Manager pada object tersebut (ini mirip dengan perintah like pada SQL).
  • Untuk menampilkan hasil pencarian ke layar konsol :
foreach (var name in jabatanKry)
{
   Console.WriteLine(name);
}
 
Console.ReadLine();
Setelah dijalankan, maka hasilnya :
Running Program
Contoh 2 :
Pada contoh 2 ini, kita akan membuat class tersendiri yang memiliki beberapa properti yang kita definisikan. Kita akan membuat beberapa objek dari class tersebut, dan mengisikan beberapa data ke dalamnya. Kemudian kita akan melakukan pencarian data pada objek-objek class tersebut.
Buat sebuah Project bertipe Console Application, beri nama dengan LINQtoObject2. Untuk memudahkan pembahasan, buat saja project baru pada Solution yang sebelumnya :

Menambahkan Project Baru Dalam Satu Solution

Buat class baru dengan nama Pegawai.cs dan ketikkan kode untuk membuat beberapa properti, seperti berikut :

Membuat Class Baru

Kemudian di dalam method Main, ketikkan kode berikut :
  • Buat beberapa object dari class Pegawai dan sekaligus masukkan data-data ke dalam propertinya :
 Pegawai pegawai = new Pegawai();
 
 pegawai.Nama = "Teddy S";
 pegawai.Alamat = "Jl. Kepompong Utara";
 pegawai.Gaji = 3500000.00;
 
 Pegawai pegawai2 = new Pegawai();
 pegawai2.Nama = "Anton G";
 pegawai2.Alamat = "Jl. Rawa Semprung";
 pegawai2.Gaji = 4000000.00;
 
 Pegawai pegawai3 = new Pegawai();
 pegawai3.Nama = "Boby S";
 pegawai3.Alamat = "Jl. Merdeka Timur";
 pegawai3.Gaji = 5000000.00;
 
 Pegawai pegawai4 = new Pegawai();
 pegawai4.Nama = "Havizul";
 pegawai4.Alamat = "Jl. Ahmad Yani 2";
 pegawai4.Gaji = 15000000.00;
  • Kumpulkan seluruh object tersebut ke dalam List<T> :
    
    
    List<Pegawai> dataPegawai = new List<Pegawai>();
    dataPegawai.Add(pegawai);
    dataPegawai.Add(pegawai2);
    dataPegawai.Add(pegawai3);
    dataPegawai.Add(pegawai4) 
  • Sintax LINQ ;
var lDataPegawai = from Pegawai pgw in dataPegawai select pgw;
  • Tampilkan hasil pencarian ke layar konsol :
foreach (Pegawai pgw in lDataPegawai)
{
   Console.WriteLine(pgw.Nama + "\t\t" + pgw.Alamat + "\t" + pgw.Gaji);
}
  • Untuk mengakhiri tekan Enter :
Console.WriteLine("\n\nTekan Enter untuk mengakhiri...");
Console.ReadLine();
  • Sebelum dijalankan, Set as StartUp Project pada LINQtoObject2 :
  • Jalankan aplikasi, hasilnya :
Running Program

Contoh 3 :
Pada contoh 3 ini kita akan mencoba membuat program yang sedikit lebih kompleks :). Silahkan fahami satu-persatu baris kode yang ada, sehingga anda merasa nyaman dalam melakukan coding.
Program yang akan kita buat kali ini adalah sebuah aplikasi kecil yang akan mengimplementasikan teknologi LINQ, yaitu LINQ to Object. Aplikasi ini akan dikembangkan sama seperti sebelumnya, masih menggunakan aplikasi Console. Aplikasi ini akan membaca file-file yang ada di dalam sebuah folder yang lokasinya sudah didefinisikan, kemudian akan menampilkan informasi size file-file tersebut. Selain itu, aplikasi ini juga akan menampilkan informasi file dengan size terkecil, terbesar dan sepuluh besar.
  • Buat sebuah project baru berupa console application, beri nama FileInfos :
Project FileInfos Di dalam Solution Yang sama

  • Tambahkan namespace yang diperlukan :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
using System.IO;
  • Buka Class Program.cs dan tambahkan sebuah method static bertipe IEnumerable<T> untuk melakukan pencarian file (Method GetFiles) :
static IEnumerable<FileInfo> GetFiles(string path)
{
   .
   .
   .
}
  • Di dalam method GetFiles ini ketikkan kode berikut :
  • Cek lokasi folder yang akan di baca, apakah eksis :
if (!Directory.Exists(path))
{
    throw new DirectoryNotFoundException();
}
  • Kalau eksis, baca informasi seluruh file di dalam folder tersebut dan simpan informasinya di dalam Array bertipe string :
string[] fileNames = null;           
fileNames = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
  • Ekstrak setiap informasi file yang tersimpan di dalam array fileNames dan kumpulkan di dalam List<FileInfo> file :
List<FileInfo> files = new List<FileInfo>();
foreach (string name in fileNames)
{
    files.Add(new FileInfo(name));
} 
  • Kembalikan nilai berupa List<FileInfo> :
return files;
  • Kembali ke method Main, dan ketikkan kode berikut :
  • Tentukan lokasi folder yang akan dilakukan pembacaan informasi file-file di dalamnya, kemudian panggil method GetFiles untuk membaca informasi file-file tersebut :
string searchFolder = "C:\\Documents and Settings\\David\\My Documents";           
IEnumerable<FileInfo> fileList = GetFiles(searchFolder);
  • Dengan query LINQ, ambil seluruh informasi file-file yang telah dibaca :
var queryAllFile = from allFile in fileList select allFile;
  • Dapatkan file dengan size terkecil, dan hasilnya ambil dengan query LINQ :
var getMinFile = queryAllFile.Min(minFile => minFile.Length);
var queryMinFile = (from file in fileList where file.Length == getMinFile select file).Single(); 
  • Dapatkan file dengan size terbesar dan hasilnya ambil dengan query LINQ :
var getmaxFile = queryAllFile.Max(maxFile => maxFile.Length);
var queryMaxFile = (from file in fileList where file.Length == getmaxFile select file).Single();
  • Dengan menggunakan query LINQ, cari 10 file dengan size terbesar :
var top10LargeFile = (from file in fileList orderby file.Length descending select file).Take(10);
  • Tampilkan ke layar konsol informasi file dengan size terkecil dan file dengan size terbesar :
Console.WriteLine("Largest File on folder {0} \nName : {1} \nFull Name : {2}\nLength : {3}", searchFolder, queryMaxFile.Name, queryMaxFile.FullName, queryMaxFile.Length);
Console.WriteLine("\nSmallest File on Folder {0} \nName : {1} \nFull Name : {2} \nLength : {3}", searchFolder, queryMinFile.Name, queryMinFile.FullName, queryMinFile.Length);
  • Tampilkan di layar konsol 10 file dengan ukuran terbesar :
Console.WriteLine("\nTop 10 Largest files on folder {0}\n", searchFolder);
int i = 0;
foreach (var files in top10LargeFile)
{
     Console.WriteLine("{0}. Name : {1}, Length : {2}\n", ++i, files.Name, files.Length);
}
  • Informasi bagi user. Tekan Exit jika ingin mengakhiri program :
Console.WriteLine("\n\nPress Enter to Exit...");
Console.ReadLine();
  • Selesai. Sebelum menjalankan program, set FileInfos sebagai startup project :
Set Project FileInfos sebagai Startup Project
  • Jalankan program dan hasilnya akan seperti ini :

Ok, sampai di sini dulu tutorial LINQ bagian ke 2 ini, pada tutorial berikutnya insya Allah kita akan membahas mengenai LINQ to SQL.

Selamat mencoba...

Tidak ada komentar:

Posting Komentar