
LINQ 2 Object
Berikut merupakan posting lanjutan tentang pemanfaatan LINQ pada Visual Studio Sekarang kita coba kemapuan LINQ dalam melakukan proses query kedalam OBJECT collection (Array, ArrayList, HashTable, Directory, List dan juga user define collection).
Berikut sample pengunaan LINQ dalam mengakses system file pada computer kita.
[javasript]
Dim FileList = From file In My.Computer.FileSystem.GetFiles(CurDir()) _
Select file
Dim hasil = “DAFTAR FILE” + vbCrLf
For Each file In FileList
hasil = hasil + ” ” + file.ToString + vbCrLf
Next
MsgBox(hasil)
[/javascript]
Proses diatas melakukan Query terhadap system File yang ada computer kita, dan kemudian menampilkan daftar hasil query yg didapatkan. Proses diatas akan menampilkan data seperti gambar berikut:

LINQ 2 Object
Local Type Inference
Sebelumnya lebih jauh membahas LINQ, kita berkenalan sebentar dengan istilah Local Type Inference dalam visual basic karena tehnik ini akan digunakan pada proses LINQ, istilah LOCAL TYPE INFENRENCE ini adalah kemampuan menyimpulkan type data yang kita berikan kedalam sebuah variable berdasarkan nilai yang dimasukan.
Contoh:
Dim cData = "Jakarta – Indonesia" Dim nNilai = 666
Dengan local type inference, maka secara automatis akan segera menyimpulkan bahwa variable cData memiliki type String dan nNilai memiliki type data Integer.
Pada sintaks LINQ kita akan sering menuliskan proses seperti berikut :
Dim Hasil = From num In numbers _ Where num Mod 2 = 0 _ Select num
Dari sintaks LINQ diatas kita mengunakan kemampuan Local type inference pada VB, dari proses diatas automatis variable akan berisi type data IEnumerable(T) collection walaupun kita tidak mendeklarasikan sebelumnya.
Catatan:
IEnumerable(T), Maksud tanda (T) disini adalah type data sesuai hasil proses, bisa berupa IEnumerable (of String/char/integer/dsb)
Jika kita mengarahkan cursor mouse keatas nama variable HASIL maka kita akan segera diinformasikan type data yang diberikan untuk variable tsb. Hal ini juga berlaku saat kita melakukan proses LINQ pada XML atau database.

LINQ
Sekarang kita kembali lagi kedalam pembahasan tentang LINQ to OBJECT, object-object apa saja sih sebenarnya yang dapat diproses mengunakan LINQ. Menurut MSDN semua object collection dapat kita query mengunakan LINQ, object2 ini antara lain Array, ArrayList, HashTable, Dirctory ataupun type collection object yg kita buat sendiri.
Sekarang kita coba saja satu persatu pengunaan LINQ pada object2 tersebut.
ARRAY COLLECTION
Berikut contoh pengunaan LINQ pada ARRAY Collection, disini kita akan membuat sebuah variable array berisi nama-nama hari, kemudian kita melakukan query untuk data array yang memiliki huruf depan “S” saja.
Dim aHARI() As String = _
{"senin", "selasa", "rabu", "kamis", "jum’at", "sabtu", "minggu"}
Dim LINQ = From item In aHARI _
Where Microsoft.VisualBasic.Left(item, 1) = "s" _
Select item
Dim hasil = "HASIL QUERY" & vbCrLf
For Each item In LINQ
hasil = hasil & item & vbCrLf
Next
MsgBox(hasil)
Dari proses diatas akan dihasilkan nilai “Senin, Selasa, Sabtu” pada messagebox.

LINQ array
ARRAYLIST COLLECTION
Sekarang kita coba mengunakan LINQ pada ARRAYLIST Collection, contoh berikut kita akan membuat array list berisi nama-nama kota, kemudian kita melakukan query untuk kota2 yang berhuruf depan “J”.
Dim aKOTA As New ArrayList
aKOTA.Add("Jakarta")
aKOTA.Add("Bandung")
aKOTA.Add("Malang")
aKOTA.Add("Jambi")
aKOTA.Add("Surabaya")
aKOTA.Add("Medan")
Dim LINQ = From item In aKOTA _
Where Microsoft.VisualBasic.Left(item, 1) = "J" _
Select item
Dim hasil = "HASIL QUERY KOTA" & vbCrLf
For Each item In LINQ
hasil = hasil & item & vbCrLf
Next
MsgBox(hasil)
Dari hasil diatas akan terdapat data “Jakarta dan Jambi” pada messagebox.

LINQ array
HASHTABLE COLLECTION
Berikut contoh query data LINQ pada HASHTABLE Collection, disini kita akan membuat variable HashTable yg berisi data2 String berikut keyed untuk masing2 data tsb, kemudian kita akan mengquery data untuk keyed yg lebih dari 3 saja.
Dim oHashTable As New Hashtable oHashTable.Add(1, "Jerry") oHashTable.Add(2, "Peter") oHashTable.Add(3, "Visual") oHashTable.Add(4, "Studio") oHashTable.Add(5, "Hash") oHashTable.Add(6, "Table") oHashTable.Add(7, "LINQ") Dim LINQ = From item In oHashTable _ Where item.key > 3 _ Order By item.key _ Select item Dim HASIL = "HASIL QUERY HASHTABLE" & vbCrLf For Each item As DictionaryEntry In LINQ HASIL=HASIL & "KEY:" & item.Key & " VALUE:" & item.Value & vbCrLf Next MsgBox(HASIL)
Dari proses tersebut akan dihasilkan data “Studio, Hash, Table, LINQ” pada messagebox yang muncul.

LINQ array
USER DEFINE ARRAYLIST COLLECTION
Proses terakhir kita coba mengunakan LINQ untuk mengakses sebuah Type data yang collection yang kita buat sendiri. Pada contoh berikut kita coba membuat sebuah class object baru PRODUCT, untuk membuat class baru ini click kanan pada nama project yang ada pada Solution explorer –> add –> class.

add-class-vb
Berikan nama class tersebut PRODUCT.VB, Kemudian buat struktur class dengan 4 buah property dengan sintaks berikut
Public Class product Public ProductID As String Public Nama As String Public Supplier As String Public HNA As Integer Public HPP As Integer End Class
Sekarang kita kembali pada form project kita, tambahkan sebuah tombol kedalam form dan isi script proses berikut pada event Click tombol yang baru dibuat.
Dim product1 As New product With {.ProductID = "01", _
.Nama = "Obat batuk", _
.Supplier = "SUPPLIER_A", _
.HNA = 1000, _
.HPP = 900}
Dim product2 As New product With {.ProductID = "02", _
.Nama = "Obat pusing", _
.Supplier = "SUPPLIER_A", _
.HNA = 1500, _
.HPP = 1200}
Dim product3 As New product With {.ProductID = "02", _
.Nama = "Obat tidur", _
.Supplier = "SUPPLIER_B", _
.HNA = 2500, _
.HPP = 2400}
Dim aProduct As New ArrayList()
aProduct.Add(product1)
aProduct.Add(product2)
aProduct.Add(product3)
Dim LINQ = From item As product In aProduct _
Where item.HPP > 1000 _
Select item
For Each item In LINQ
MsgBox("Product ID : " & item.ProductID & vbCrLf & _
"Nama product: " & item.Nama & vbCrLf & _
"HNA : " & item.HNA & vbCrLf & _
"HPP : " & item.HPP)
Next
Baris 1 – 15 : Membuat 3 buah variable baru berikut nilainya dari class product.vb
Baris 16 – 19 : Membuat sebuah variable ArrayList dan menambahkan 3 buah variable product yg telah dibuat sebelumnya.
Baris 21 – 23 : Melakukan proses LINQ untuk mengambil data product yg memiliki HPP lebih besar dari 1000.
Baris 24 – 29 : Melakukan proses loop membaca data hasil proses LINQ sebelumnya, dari proses ini seharusnya muncul 2 kali messagebox yang menampilkan data product 001 dan 002.
Contoh diatas hanya gambaran mengunakan User define collection, dan mengakses -nya mengunakan LINQ, pada real applikasi seharusnya lebih effektif mengunakan database untuk kasus pembuatan daftar barang.
Masih ada beberapa fasilitas lain yang dapat kita gunakan dalam LINQ to Object seperti JOIN, AGGREGATE, DISTINCT, GROUP dsb. Namun untuk perkenalan awal dengan LINQ kita bahas beberapa hal diatas dahulu, untuk lebih jauh lagi akan dibuat pada posting terpisah nantinya.

LINQ array
s
Related posts: