Penelusuran kesalahan LINQ
Visual Studio mendukung penelusuran kesalahan kode kueri terintegrasi bahasa komputer (LINQ), dengan beberapa batasan. Sebagian besar fitur penelusuran kesalahan bekerja dengan pernyataan LINQ, termasuk melangkah, mengatur titik henti, dan melihat hasil di jendela debugger. Topik ini menjelaskan batasan utama dari penelusuran kesalahan LINQ.
Menampilkan Hasil LINQ
Anda dapat melihat hasil pernyataan LINQ dengan menggunakan DataTips, jendela Watch, dan kotak dialog QuickWatch. Saat Anda menggunakan jendela sumber, Anda dapat menjeda penunjuk pada kueri di jendela sumber dan DataTip akan muncul. Anda dapat menyalin variabel LINQ dan menempelkannya ke jendela Watch atau kotak dialog QuickWatch.
Di LINQ, kueri tidak dievaluasi saat dibuat atau dideklarasikan, tetapi hanya saat kueri digunakan. Oleh karena itu, kueri tidak memiliki nilai sampai dievaluasi. Untuk deskripsi lengkap tentang pembuatan dan evaluasi kueri, lihat Pengantar Kueri LINQ (C#) atau Menulis Kueri LINQ Pertama Anda.
Untuk menampilkan hasil kueri, debugger harus mengevaluasinya. Evaluasi implisit ini, yang terjadi saat Anda melihat hasil kueri LINQ di debugger, memiliki beberapa efek yang harus Anda pertimbangkan:
Setiap evaluasi kueri membutuhkan waktu. Memperluas node hasil membutuhkan waktu. Untuk beberapa kueri, evaluasi berulang dapat mengakibatkan penalti performa yang nyata.
Mengevaluasi kueri dapat mengakibatkan efek samping, yaitu perubahan nilai data atau status program Anda. Tidak semua pertanyaan memiliki efek samping. Untuk menentukan apakah kueri dapat dievaluasi dengan aman tanpa efek samping, Anda harus memahami kode yang mengimplementasikan kueri.
Melangkah dan LINQ
Saat Anda melakukan penelusuran kesalahan kode LINQ, melangkah memiliki beberapa perbedaan perilaku yang harus Anda ketahui.
LINQ ke SQL
Dalam kueri LINQ ke SQL, kode predikat berada di luar kendali debugger. Oleh karena itu, Anda tidak dapat masuk ke kode predikat. Setiap kueri yang dikompilasi ke pohon ekspresi menghasilkan kode yang berada di luar kendali debugger.
Melangkah dalam Visual Basic
Ketika Anda melangkah melalui program Visual Basic dan debugger menemukan deklarasi kueri, itu tidak masuk ke dalam deklarasi tetapi menyoroti seluruh deklarasi sebagai satu pernyataan. Perilaku ini terjadi karena kueri tidak dievaluasi sampai dipanggil. Untuk informasi selengkapnya, lihat Pengantar LINQ di Visual Basic.
Jika Anda menelusuri kode contoh berikut, debugger akan menyoroti deklarasi kueri, atau pembuatan kueri, sebagai satu pernyataan.
Function MyFunction(ByVal x As Char)
Return True
End Function
Sub Main()
'Query creation
Dim x = From it In "faoaoeua" _
Where MyFunction(it) _
Select New With {.a = it}
' Query execution
For Each cur In x
Console.WriteLine(cur.ToString())
Next
End Sub
Ketika Anda melangkah lagi, debugger menyoroti For Each cur In x
. Pada langkah selanjutnya, debugger melangkah ke dalam fungsi MyFunction
. Setelah melewati MyFunction
, debugger melompat kembali ke Console.WriteLine(cur.ToSting())
. Tidak ada gunanya melewati kode predikat dalam deklarasi kueri, meskipun debugger mengevaluasi kode itu.
Mengganti Predikat dengan Fungsi untuk Mengaktifkan Langkah (Visual Basic)
Jika Anda harus menelusuri kode predikat untuk tujuan penelusuran kesalahan, Anda dapat mengganti predikat dengan panggilan ke fungsi yang berisi kode predikat asli. Misalnya, Anda memiliki kode ini:
Dim items() as integer ={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
' Get the even numbers
Dim query = From nextInt in items Where nextInt Mod 2 = 0 Select nextInt
For each item in query
Console.WriteLine(item)
Next
Anda dapat memindahkan kode predikat ke fungsi baru, yang disebut IsEven
:
Dim items () as integer ={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
' Get the even numbers
Dim query = From nextInt in items Where IsEven(nextInt) Select nextInt
For each item in query
Console.WriteLine(item)
Next
...
Function IsEven(item As =Integer) as Boolean
Return item Mod 2 = 0
End Function
Kueri yang direvisi memanggil fungsi IsEven
pada setiap lintasan melalui items
. Anda dapat menggunakan jendela debugger untuk melihat apakah setiap item memenuhi kondisi yang ditentukan, dan Anda dapat menelusuri kode di IsEven
. Predikat dalam contoh ini cukup sederhana. Namun, jika Anda memiliki predikat yang lebih sulit Anda harus mendebug, teknik ini bisa sangat berguna.
Edit dan Lanjutkan Tidak Didukung untuk LINQ
Edit dan Lanjutkan mendukung perubahan pada kueri LINQ dengan batasan. Untuk detailnya, lihat Perubahan yang Didukung EnC
Konten terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk