2009-11-12 2 views
1

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

ответ

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

Смежные вопросы