Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Panduan ini menunjukkan bagaimana Anda dapat menggunakan fitur bahasa Visual Basic untuk menulis ekspresi kueri Language-Integrated Query (LINQ). Panduan ini menunjukkan cara membuat kueri pada daftar objek Siswa, cara menjalankan kueri, dan cara mengubahnya. Kueri menggabungkan beberapa fitur termasuk penginisialisasi objek, inferensi jenis lokal, dan jenis anonim.
Setelah menyelesaikan panduan ini, Anda akan siap untuk beralih ke sampel dan dokumentasi untuk penyedia LINQ tertentu yang Anda minati. Penyedia LINQ mencakup LINQ ke SQL, LINQ ke Himpunan Data, dan LINQ ke XML.
Membuat Proyek
Untuk membuat proyek aplikasi konsol
Mulai Visual Studio.
Pada menu File , arahkan ke Baru, lalu klik Proyek.
Di daftar Templat terinstal , klik Visual Basic.
Dalam daftar jenis proyek, klik Aplikasi Konsol. Dalam kotak Nama , ketik nama untuk proyek, lalu klik OK.
Proyek dibuat. Secara default, ini berisi referensi ke System.Core.dll. Selain itu, daftar Namespace yang diimpor di Halaman Referensi, Perancang Proyek (Visual Basic) menyertakan System.Linq.
Pada Halaman Kompilasi, Desainer Proyek (Visual Basic), pastikan bahwa Inferensi Opsi diatur ke Aktif.
Menambahkan Sumber Data In-Memory
Sumber data untuk kueri dalam panduan ini adalah daftar Student objek. Setiap Student objek berisi nama depan, nama belakang, tahun kelas, dan peringkat akademik dalam badan siswa.
Untuk menambahkan sumber data
StudentTentukan kelas, dan buat daftar instans kelas.Penting
Kode yang diperlukan untuk menentukan
Studentkelas dan membuat daftar yang digunakan dalam contoh panduan disediakan dalam Cara: Membuat Daftar Item. Anda dapat menyalinnya dari sana dan menempelkannya ke proyek Anda. Kode baru menggantikan kode yang muncul saat Anda membuat proyek.
Untuk menambahkan siswa baru ke daftar siswa
- Ikuti pola dalam
getStudentsmetode untuk menambahkan instansStudentkelas lain ke daftar. Menambah siswa, Anda akan diperkenalkan kepada penginisialisasi objek. Untuk informasi selengkapnya, lihat Penginisialisasi Objek: Jenis Bernama dan Anonim.
Membuat Kueri
Saat dijalankan, kueri yang ditambahkan di bagian ini menghasilkan daftar siswa yang peringkat akademiknya menempatkan mereka di sepuluh besar. Karena kueri memilih objek lengkap Student setiap kali, jenis hasil kueri adalah IEnumerable(Of Student). Namun, jenis kueri biasanya tidak ditentukan dalam definisi kueri. Sebagai gantinya, pengkompilasi menggunakan inferensi jenis lokal untuk menentukan jenisnya. Untuk informasi selengkapnya, lihat Inferensi Jenis Lokal. Variabel rentang kueri, currentStudent, berfungsi sebagai referensi ke setiap Student instans di sumbernya, students, menyediakan akses ke properti setiap objek di students.
Untuk membuat kueri sederhana
Temukan tempat dalam metode proyek
Mainyang ditandai sebagai berikut:' ****Paste query and query execution code from the walkthrough, ' ****or any code of your own, here in Main.Salin kode berikut dan tempelkan.
Dim studentQuery = From currentStudent In students Where currentStudent.Rank <= 10 Select currentStudentLetakkan penunjuk mouse di atas
studentQuerydalam kode Anda untuk memverifikasi bahwa jenis yang ditetapkan kompilator adalahIEnumerable(Of Student).
Menjalankan Kueri
Variabel studentQuery berisi definisi kueri, bukan hasil menjalankan kueri. Mekanisme umum untuk menjalankan kueri adalah perulangan For Each . Setiap elemen dalam urutan yang dikembalikan diakses melalui variabel iterasi perulangan. Untuk informasi selengkapnya tentang eksekusi kueri, lihat Menulis Kueri LINQ Pertama Anda.
Untuk menjalankan query
Tambahkan perulangan berikut
For Eachdi bawah kueri dalam proyek Anda.For Each studentRecord In studentQuery Console.WriteLine(studentRecord.Last & ", " & studentRecord.First) NextLetakkan penunjuk mouse di atas variabel
studentRecordkontrol perulangan untuk melihat jenis datanya. JenisstudentRecorddiperkirakan menjadiStudent, karenastudentQuerymenghasilkan kumpulan instanceStudent.Buat dan jalankan aplikasi dengan menekan CTRL+F5. Perhatikan hasilnya di jendela konsol.
Mengubah Kueri
Lebih mudah untuk memindai hasil kueri jika berada dalam urutan tertentu. Anda dapat mengurutkan urutan yang dikembalikan berdasarkan bidang yang tersedia.
Untuk mengurutkan hasil
Tambahkan klausa berikut
Order ByantaraWherepernyataan danSelectpernyataan kueri. KlausaOrder Byakan mengurutkan hasil menurut abjad dari A hingga Z, sesuai dengan nama belakang setiap siswa.Order By currentStudent.Last AscendingUntuk mengurutkan menurut nama belakang lalu nama depan, tambahkan kedua bidang ke kueri:
Order By currentStudent.Last Ascending, currentStudent.First AscendingAnda juga dapat menentukan
Descendinguntuk memesan dari Z ke A.Buat dan jalankan aplikasi dengan menekan CTRL+F5. Perhatikan hasilnya di jendela konsol.
Untuk memperkenalkan pengidentifikasi lokal
Tambahkan kode di bagian ini untuk memperkenalkan pengidentifikasi lokal dalam ekspresi kueri. Pengidentifikasi lokal akan menyimpan hasil sementara. Dalam contoh berikut,
nameadalah pengidentifikasi yang menyimpan perangkaian nama depan dan belakang siswa. Pengidentifikasi lokal dapat digunakan untuk kemudahan, atau dapat meningkatkan performa dengan menyimpan hasil suatu ekspresi yang seharusnya dihitung beberapa kali.Dim studentQuery2 = From currentStudent In students Let name = currentStudent.Last & ", " & currentStudent.First Where currentStudent.Year = "Senior" And currentStudent.Rank <= 10 Order By name Ascending Select currentStudent ' If you see too many results, comment out the previous ' For Each loop. For Each studentRecord In studentQuery2 Console.WriteLine(studentRecord.Last & ", " & studentRecord.First) NextBuat dan jalankan aplikasi dengan menekan CTRL+F5. Perhatikan hasilnya di jendela konsol.
Untuk memproyekan satu bidang dalam klausa Pilih
Tambahkan kueri dan
For Eachperulangan dari bagian ini untuk membuat kueri yang menghasilkan urutan yang elemennya berbeda dari elemen di sumber. Dalam contoh berikut, sumbernya adalah kumpulanStudentobjek, tetapi hanya satu anggota dari setiap objek yang dikembalikan: nama depan siswa yang nama belakangnya adalah Garcia. KarenacurrentStudent.Firstadalah string, jenis data urutan yang dikembalikan olehstudentQuery3adalahIEnumerable(Of String), urutan string. Seperti dalam contoh sebelumnya, penetapan jenis data untukstudentQuery3dibiarkan bagi pengkompilasi untuk menentukan dengan menggunakan inferensi jenis lokal.Dim studentQuery3 = From currentStudent In students Where currentStudent.Last = "Garcia" Select currentStudent.First ' If you see too many results, comment out the previous ' For Each loops. For Each studentRecord In studentQuery3 Console.WriteLine(studentRecord) NextLetakkan penunjuk mouse di atas
studentQuery3dalam kode Anda untuk memverifikasi bahwa jenis yang ditetapkan adalahIEnumerable(Of String).Buat dan jalankan aplikasi dengan menekan CTRL+F5. Perhatikan hasilnya di jendela konsol.
Untuk membuat jenis anonim di klausa Pilih
Tambahkan kode dari bagian ini untuk melihat bagaimana jenis anonim digunakan dalam kueri. Anda menggunakannya dalam kueri saat Anda ingin mengembalikan beberapa bidang dari sumber data daripada rekaman lengkap (
currentStudentrekaman dalam contoh sebelumnya) atau bidang tunggal (Firstdi bagian sebelumnya). Alih-alih menentukan jenis bernama baru yang berisi bidang yang ingin Anda sertakan dalam hasilnya, Anda menentukan bidang dalamSelectklausa dan pengompilasi membuat jenis anonim dengan bidang tersebut sebagai propertinya. Untuk informasi selengkapnya, lihat Jenis Anonim.Contoh berikut membuat kueri yang mengembalikan nama dan peringkat senior yang peringkat akademiknya antara 1 dan 10, dalam urutan peringkat akademik. Dalam contoh ini, jenis
studentQuery4harus disimpulkan karenaSelectklausul mengembalikan instans jenis anonim, dan jenis anonim tidak memiliki nama yang dapat digunakan.Dim studentQuery4 = From currentStudent In students Where currentStudent.Year = "Senior" And currentStudent.Rank <= 10 Order By currentStudent.Rank Ascending Select currentStudent.First, currentStudent.Last, currentStudent.Rank ' If you see too many results, comment out the previous ' For Each loops. For Each studentRecord In studentQuery4 Console.WriteLine(studentRecord.Last & ", " & studentRecord.First & ": " & studentRecord.Rank) NextBuat dan jalankan aplikasi dengan menekan CTRL+F5. Perhatikan hasilnya di jendela konsol.
Contoh Tambahan
Sekarang setelah Anda memahami dasar-dasarnya, berikut ini adalah daftar contoh tambahan untuk mengilustrasikan fleksibilitas dan kekuatan kueri LINQ. Setiap contoh didahului oleh deskripsi singkat tentang apa yang dilakukannya. Letakkan penunjuk mouse di atas variabel hasil kueri untuk setiap kueri untuk melihat jenis yang disimpulkan. Gunakan perulangan For Each untuk menghasilkan hasilnya.
' Find all students who are seniors.
Dim q1 = From currentStudent In students
Where currentStudent.Year = "Senior"
Select currentStudent
' Write a For Each loop to execute the query.
For Each q In q1
Console.WriteLine(q.First & " " & q.Last)
Next
' Find all students with a first name beginning with "C".
Dim q2 = From currentStudent In students
Where currentStudent.First.StartsWith("C")
Select currentStudent
' Find all top ranked seniors (rank < 40).
Dim q3 = From currentStudent In students
Where currentStudent.Rank < 40 And currentStudent.Year = "Senior"
Select currentStudent
' Find all seniors with a lower rank than a student who
' is not a senior.
Dim q4 = From student1 In students, student2 In students
Where student1.Year = "Senior" And student2.Year <> "Senior" And
student1.Rank > student2.Rank
Select student1
Distinct
' Retrieve the full names of all students, sorted by last name.
Dim q5 = From currentStudent In students
Order By currentStudent.Last
Select Name = currentStudent.First & " " & currentStudent.Last
' Determine how many students are ranked in the top 20.
Dim q6 = Aggregate currentStudent In students
Where currentStudent.Rank <= 20
Into Count()
' Count the number of different last names in the group of students.
Dim q7 = Aggregate currentStudent In students
Select currentStudent.Last
Distinct
Into Count()
' Create a list box to show the last names of students.
Dim lb As New System.Windows.Forms.ListBox
Dim q8 = From currentStudent In students
Order By currentStudent.Last
Select currentStudent.Last Distinct
For Each nextName As String In q8
lb.Items.Add(nextName)
Next
' Find every process that has a lowercase "h", "l", or "d" in its name.
Dim letters() As String = {"h", "l", "d"}
Dim q9 = From proc In System.Diagnostics.Process.GetProcesses,
letter In letters
Where proc.ProcessName.Contains(letter)
Select proc
For Each proc In q9
Console.WriteLine(proc.ProcessName & ", " & proc.WorkingSet64)
Next
Informasi Tambahan
Setelah Anda terbiasa dengan konsep dasar bekerja dengan kueri, Anda siap untuk membaca dokumentasi dan sampel untuk jenis penyedia LINQ tertentu yang Anda minati: