Linq使用匿名类型的问题

时间:2009-11-12 18:21:23

标签: .net vb.net linq anonymous-types

为什么匿名类型属性“Points”仍然具有值“0”?

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

1 个答案:

答案 0 :(得分: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

这应该会给你你期望的行为。