Menguasai Linq To Datatables Dalam Waktu Singkat
LINQ to objects dapat bekerja pada setiap objek yang mengimplementasikan IEnumerable (antarmuka yang sama yang memungkinkan objek digunakan dalam loop For Each). Dataset adalah objek, tetapi mereka tidak mengimplementasikan IEnumerable secara default, sehingga Anda perlu menambahkan referensi ke pustaka yang menambahkan beberapa metode ekstensi yang membungkus DataTable dan memungkinkan untuk dienumerasi.
Anda dapat pergi ke Project > References > Add > .NET > System.Data.DataSetExtensions untuk menambahkan referensi tersebut.
Dalam LINQ, Anda selalu memulai kueri dengan pernyataan From.
From a In b
Ini memberi Anda akses ke setiap item yang merupakan bagian dari koleksi B dengan cara yang sama seperti loop for.
Untuk sisa loop for (atau kueri linq), Anda dapat merujuk pada a dan secara otomatis dipopulasi saat melintasi koleksi.
Jika Anda ingin melintasi DataTable, Anda perlu membuat tabel yang dapat dienumerasi dengan memanggil DataTable.AsEnumerable () untuk mengubah koleksi baris menjadi yang dapat dienumerasi. Saat Anda melintasi DataTable, Anda akan memegang objek baris, sehingga Anda dapat secara umum menanyakan hal yang sama dengan yang Anda lakukan sebaliknya.
Jika saya memiliki objek DataRow, saya dapat mendapatkan nilai seperti ini:
Dim name = myRow.Field(Of String)("Name")Dim name = myRow("Name")
Misalkan kita memiliki Query SQL berikut yang ingin kita lakukan di .NET dengan Datatable:
SELECT p.ID, p.Name, e.SSN FROM People p JOIN ExtendedInfo e ON p.ID = e.PersonID
LINQ (terutama dengan menggunakan Syntax Query) dimaksudkan untuk berfungsi sangat mirip dengan SQL. Jadi, inilah tampilannya di .NET:
Dim query = From person In people.AsEnumerable() Join extra In extendedInfo.AsEnumerable() On person("ID") Equals extra("PersonID") Select New With { .ID = person("ID"), .Name = person("Name"), .SSN = extra("SSN") }
Sintaks di bawah hanya membuat objek anonim baru dan kemudian memilihnya. Kita dapat memilih setiap objek yang tersedia dari kueri (yaitu, orang) atau kita dapat membuatnya sendiri secara langsung dan memilihnya.
Jika Anda tidak terbiasa dengan objek anonim, sintaksnya mungkin terlihat tidak biasa, tetapi itu adalah konsep yang cukup dasar. Salah satu fitur yang jarang digunakan yang mungkin tidak Anda ketahui adalah bahwa jika kita ingin menginisialisasi kelas Person (yang memiliki Properti Name), kita dapat menetapkan properti nama langsung dari inisialisasi dengan menggunakan pernyataan With {} seperti ini:
Dim typedPerson = New Person With { .Name = "Angelic" }
Jika kita tidak memiliki kelas Person untuk memasukkan data kita, atau kita hanya ingin melakukannya dengan cepat, kita dapat melakukan hal yang sama dengan menghilangkan nama kelas dan kemudian hanya memasukkan properti apa pun yang kita inginkan agar kelas baru kita miliki.
Catatan: Kompilator akan benar-benar membuat kelas untuk Anda di balik layar yang memiliki semua properti yang Anda tentukan, tetapi kita tidak memiliki namanya - sehingga ia anonim.
Dim anonPerson = New With {.Name = "Angelic"}
Sekarang kita memiliki query yang, setelah dievaluasi, akan mengembalikan tabel yang telah bergabung ke dalam kumpulan objek anonim yang dapat dienumerasi. Jika kita ingin mengonversi kembali ke DataTable baru, caranya mudah dengan memanggil CopyToDataTable pada hasil query:
Dim newTable = query.CopyToDataTable()
Namun, saat melakukan ini sekarang, Anda akan mendapatkan pesan kesalahan berikut:
CopyToDataTable is not a member of System.Collections.Generic.IEnumerable(Of <anonymous type>)
Baiklah, saya berbohong - Itu akan mudah jika enumerable adalah tipe DataRow. Tetapi jangan khawatir, seperti yang ditulis oleh artikel MSDN ini tentang How to Implement CopyToDataTable Where the Generic Type T Is Not a DataRow, Anda hanya perlu menyertakan beberapa metode ekstensi tambahan yang tidak disertakan dengan DataSetExtensions.
Cukup tambahkan file ini ke proyek Anda di mana saja.
Sekarang kode seharusnya dapat dikompilasi dan berfungsi dengan baik.
Anda dapat menguji hasilnya dengan menjalankan:
For Each row In newTable.AsEnumerable()
Console.WriteLine("ID: " & row("ID") & " / " &
"Name: " & row("Name") & " / " &
"SSN: " & row("SSN"))
Next
Jika Anda ingin menjalankan kode ini segera tanpa membuka Visual Studio, Anda dapat melihat demo yang berfungsi di dotNetFiddle di sini.
Untuk membaca lebih lanjut, ada banyak informasi yang bagus di MSDN di bawah LINQ to DataSet - Getting Started | Programming Guide.
Post a Comment for "Menguasai Linq To Datatables Dalam Waktu Singkat"