共用方式為


逐步執行和 LINQ

這個主題適用於:

版本

Visual Basic

C#

F#

C++

Web Developer

Express

標題適用於 標題適用於 標題不適用於 標題不適用於 標題適用於

Pro、Premium 和 Ultimate

標題適用於 標題適用於 標題不適用於 標題不適用於 標題適用於

偵錯 LINQ 程式碼時,您應該注意到逐步執行的有些行為差異。

LINQ to SQL

在 LINQ to SQL 查詢中,偵錯工具無法控制述詞 (Predicate) 程式碼。 因此,您無法逐步執行述詞程式碼。 任何編譯成運算式樹狀架構的查詢所造成的程式碼,都無法由偵錯工具控制。

Visual Basic 中的逐步執行

在 Visual Basic 程式中逐步執行且偵錯工具遇到查詢宣告時,並不會逐步執行該宣告,而會將整個宣告反白顯示為單一陳述式。 這種行為的發生,是因為查詢是等到被呼叫時才會評估的 如需詳細資訊,請參閱 Visual Basic 中的 LINQ 簡介

如果逐步執行下列範例程式碼,偵錯工具會將查詢宣告或查詢建立反白顯示為單一陳述式。

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

再度逐步執行時,偵錯工具會反白顯示 For Each cur In x。 下一個逐步執行動作中,會進入函式 MyFunction。 逐步執行完 MyFunction 後,會跳回 Console.WriteLine(cur.ToSting())。 沒有任何一點會讓偵錯工具逐步執行查詢宣告中的述詞程式碼,雖然偵錯工具確實會評估該程式碼。

使用函式取代述詞以啟用逐步執行 (Visual Basic)

如果基於偵錯目的而必須逐步執行述詞程式碼,您可以藉由呼叫包含原始述詞程式碼的函式來取代述詞。 例如,假設您有下段程式碼:

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

您可以將述詞程式碼移到新的函式,名為 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

修訂的查詢每回會透過 items 呼叫函式 IsEven。 您可以使用偵錯工具視窗查看每個項目是否符合指定狀況,而且可以逐步執行 IsEven 中的程式碼。 這個範例中的述詞相當簡單。 但是,當您必須偵錯更為複雜的述詞時,這個技巧就很好用。

請參閱

概念

LINQ 的編輯後繼續功能

LINQ 查詢簡介 (C#)

Visual Basic 中的 LINQ 簡介

其他資源

偵錯 LINQ