2009-11-12 118 views
1

爲什麼匿名類型屬性「Points」仍然具有值「0」?使用匿名類型的Linq問題

Public Class Test 
    Public Sub New(ByVal _ID As Integer) 
     ID = _ID 
    End Sub 
    Public ID As Integer 
End Class 


Dim list As New List(Of Test) 
list.Add(New Test(1)) 
list.Add(New Test(2)) 
list.Add(New Test(3)) 

Dim query = From X In list Select New With {.Points = 0, X.ID} 

For Each o In query 
    o.Points = 1 
Next 
+0

直到現在,我還沒有意識到VB.NET支持(作爲選項)可變的匿名類型。 C#只支持不可變的匿名類型,我認爲這是一個明智的決定。 – TrueWill 2009-11-12 18:35:33

回答

5

因爲你query變量實際上代表查詢,而不是實際的數據集。每當你枚舉query時,它會再次執行該操作;您的聲明(分配query變量)定義查詢。枚舉它執行它。看起來您想要做的是以列表的形式創建查詢的內存中表示形式。你可以這樣做:

Dim list = (From X In list Select New With {.Points = 0, X.ID}).ToList() 

For Each o In list 
    o.Points = 1 
Next 

這應該給你你期望的行爲。

+0

謝謝!有效。 – Fernando 2009-11-12 18:31:13