Share via


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 MyFunctiongeçer. adımladıktan MyFunctionsonra öğ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ı IsEvenyeni 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 itemsher 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 IsEvenkodda 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