LINQ'de Hata Ayıklama
Visual Studio, bazı sınırlamalarla birlikte dil tümleşik sorgu (LINQ) kodunda hata ayıklamayı destekler. Hata ayıklama özelliklerinin çoğu, adımlama, kesme noktalarını ayarlama ve hata ayıklayıcı pencerelerindeki sonuçları görüntüleme gibi LINQ deyimleriyle çalışır. Bu konu başlığında LINQ hata ayıklamanın başlıca sınırlamaları açıklanmaktadır.
LINQ Sonuçlarını Görüntüleme
Data İpuçları, Watch penceresi ve QuickWatch iletişim kutusunu kullanarak LINQ deyiminin sonucunu görüntüleyebilirsiniz. Kaynak pencere kullandığınızda, işaretçiyi kaynak penceresindeki bir sorgunun üzerinde duraklatabilirsiniz ve Bir Veri İpucu görüntülenir. LINQ değişkenini kopyalayıp Gözcü penceresine veya QuickWatch iletişim kutusuna yapıştırabilirsiniz.
LINQ'te, sorgu oluşturulduğunda veya bildirildiğinde değil, yalnızca sorgu kullanıldığında değerlendirilir. Bu nedenle, sorgu değerlendirilene kadar bir değere sahip olmaz. Sorgu oluşturma ve değerlendirmenin tam açıklaması için bkz . LINQ Sorgularına Giriş (C#) veya İlk LINQ Sorgunuzu Yazma.
Bir sorgunun sonucunu görüntülemek için hata ayıklayıcının sorguyu değerlendirmesi gerekir. Hata ayıklayıcıda bir LINQ sorgu sonucunu görüntülediğinizde gerçekleşen bu örtük değerlendirmenin dikkate almanız gereken bazı etkileri vardır:
Sorgunun her değerlendirmesi zaman alır. Sonuç düğümünü genişletmek zaman alır. Bazı sorgularda yinelenen değerlendirmeler dikkat çekici bir performans cezasına neden olabilir.
Bir sorgunun değerlendirilmesi yan etkilere neden olabilir. Bu, verilerin değerinde veya programınızın durumunda yapılan değişikliklerdir. Tüm sorguların yan etkileri yoktur. Bir sorgunun yan etkileri olmadan güvenli bir şekilde değerlendirilip değerlendirilemeyeceğini belirlemek için sorguyu uygulayan kodu anlamanız gerekir.
Adımlama ve LINQ
LINQ kodunda hata ayıklarken, adımlamanın bilmeniz gereken bazı davranış farklılıkları vardır.
LINQ to SQL
LINQ to SQL sorgularında koşul kodu, hata ayıklayıcının denetiminin dışındadır. Bu nedenle, koşul koduna adım atamazsınız. bir ifade ağacına derlenen herhangi bir sorgu, hata ayıklayıcının denetiminin ötesinde bir kod üretir.
Visual Basic'te Adımlama
Bir Visual Basic programında adım atarken hata ayıklayıcı bir sorgu bildirimiyle karşılaştığında, bildirime adımlamaz ancak bildirimin tamamını tek bir deyim olarak vurgular. Bu davranış, sorgu çağrılana kadar değerlendirilmediğinden oluşur. Daha fazla bilgi için bkz . Visual Basic'te LINQ'e giriş.
Aşağıdaki örnek kodda adım adım ilerlerseniz, hata ayıklayıcı sorgu bildirimini veya sorgu oluşturmayı tek bir deyim olarak vurgular.
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
Yeniden adımladığınızda hata ayıklayıcı vurgular For Each cur In x
. Sonraki adımda işlevine MyFunction
geçer. adımladıktan MyFunction
sonra öğesine geri Console.WriteLine(cur.ToSting())
atlar. Hata ayıklayıcı bu kodu değerlendirse de, hiçbir noktada sorgu bildirimindeki koşul kodunda adım adım ilerler.
Bir Koşulu, Adımlanmayı Etkinleştirmek için İşlevle Değiştirme (Visual Basic)
Hata ayıklama amacıyla koşul kodunda adım adım ilerletmek zorundaysanız, koşulu özgün koşul kodunu içeren bir işlev çağrısıyla değiştirebilirsiniz. Örneğin, şu koda sahip olduğunuzu varsayalım:
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
Koşul kodunu adlı IsEven
yeni bir işleve taşıyabilirsiniz:
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
Düzeltilen sorgu, aracılığıyla items
her geçişte işlevini IsEven
çağırır. Her öğenin belirtilen koşulu karşılayıp karşılamadığını görmek için hata ayıklayıcı pencerelerini kullanabilir ve içindeki IsEven
kodda adım adım ilerleyebilirsiniz. Bu örnekteki koşul oldukça basittir. Ancak, hata ayıklamanız gereken daha zor bir koşul varsa, bu teknik çok yararlı olabilir.
LINQ için Düzenle ve Devam Et Desteklenmiyor
Düzenle ve Devam Et sınırlamaları olan LINQ sorgularında yapılan değişiklikleri destekler. Ayrıntılar için bkz . EnC Desteklenen Değişiklikler
İlgili içerik
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin