LINQ to OBJECT (Part 2)

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

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:

[javascript]

Dim cData = "Jakarta � Indonesia"
Dim nNilai = 666

[/javascript]

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 :

[javascript]

Dim Hasil = From num In numbers _
Where num Mod 2 = 0 _
Select num

[/javascript]

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

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.

[javascript]
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)

[/javascript]

Dari proses diatas akan dihasilkan nilai �Senin, Selasa, Sabtu� pada messagebox.

LINQ array

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�.

[javascript]

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)

[/javascript]

Dari hasil diatas akan terdapat data �Jakarta dan Jambi� pada messagebox.

LINQ array

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.

[javascript]

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)

[/javascript]

Dari proses tersebut akan dihasilkan data �Studio, Hash, Table, LINQ� pada messagebox yang muncul.

LINQ array

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

add-class-vb

Berikan nama class tersebut PRODUCT.VB, Kemudian buat struktur class dengan 4 buah property dengan sintaks berikut

[javascript]
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

[/javascript]

Sekarang kita kembali pada form project kita, tambahkan sebuah tombol kedalam form dan isi script proses berikut pada event Click tombol yang baru dibuat.

[javascript]

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

[/javascript]

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

LINQ array

s

Related Posts



Leave a Reply