Проблемы с Linq при использовании анонимного типа - PullRequest
1 голос
/ 12 ноября 2009

Почему свойство анонимного типа «Точки» все еще имеет значение «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 Ответ

5 голосов
/ 12 ноября 2009

Поскольку ваша переменная 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

Это должно дать вам ожидаемое поведение.

...