1

オブジェクトのリストで指定された 1 つ (または複数) のアイテムの 1 つのプロパティを変更する方法

Class Item
    Private _Id As Integer
    Private _Value As Boolean 'can be string, int , .....

    Public Property Id() As Integer
        Get
            Return _Id
        End Get
        Set(ByVal value As Integer)
            _Id = value
        End Set
    End Property
    Public Property Value() As Boolean
        Get
            Return _Value
        End Get
        Set(ByVal value As Boolean)
            _Value = value
        End Set
    End Property

    Public Sub New(ByVal id As Integer, ByVal value As Boolean)
        Me.Id = id
        Me.Value = value
    End Sub       
End Class

...

Dim lst As New List(Of Item)
lst.Add(New Item(1, True))
lst.Add(New Item(2, True))
lst.Add(New Item(3, True))

lst = from l in lst select l ' and change the value of the element 2 to FALSE

結果

前にリスト

Item
[_Id = 1] 
[_Value = True] 

Item
[_Id = 2] 
[_Value = True] 

Item
[_Id = 3] 
[_Value = True] 

後にリスト

Item
[_Id = 1] 
[_Value = True] 

Item
[_Id = 2] 
[_Value = False] 

Item
[_Id = 3] 
[_Value = True] 
4

1 に答える 1

1

Linq は更新ではなくクエリを実行するためのものです。更新するには、従来のループやインデクサーを使用します。

l(2).Value = false

または、Linq を使用して変更するオブジェクトを決定する場合は、クエリの結果をループするだけです。

Dim query = From l In lst Where l.Id = 2 Select l
For Each l In query
   l.Value = false
Next l

または、1 つのアイテムしか期待していないため、次のようになります。

Dim query = From l In lst Where l.Id = 2 Select l
query.Single().Value = False

リストとクエリがアイテムへの参照を保持しているため、元のリストは更新されたアイテムを持ちます。

Itemただし、わずかに異なる値を持つNEW のリストが必要な場合は、それが可能です。

Dim query = From l In lst _
            Select New Item With { _ 
               ID = l.ID, _
               Value = IIf(l.ID = 2, False, l.Value) _
            } 

ただし、これにより新しい s が作成されることに注意してください。元のリストに格納されてItemいる既存の s は変更されません。Item

于 2013-01-31T16:06:12.343 に答える