/ / converti nidificati per ciascuno su linq - vb.net, linq

convertire nidificato per ciascuno su linq - vb.net, linq

Ho due liste. Voglio vedere se entrambi gli elenchi hanno una corrispondenza su id, se lo fa, voglio impostare il colore di list2. Come posso convertire questo a linq o sarebbe bello così com'è?

For Each item1 In list1
For Each item2 In List2
If item2.ID = item.ID Then
item2.Color = "Red"
End If
Next
Next

risposte:

2 per risposta № 1

Per essere onesti, quello che hai lì è molto chiaro con quello che sta facendo, se un po 'inefficiente, quindi se è abbastanza veloce, allora forse lascialo così com'è.

Tuttavia, se vuoi cambiarlo per usare LINQ, puoi fare qualcosa del genere:

Dim list1IDs As List(Of String) = list1.Select(Function(x) x.ID).ToList()
For Each item2 In List2.Where(Function(x) list1IDs.Contains(x.ID))
item2.Color = "Red"
Next

1 per risposta № 2

Puoi usare a Join in questo caso:

Dim query = _
From item1 In list1 _
Join item2 In List2 On item1.ID Equals item2.ID

For Each x In query
x.item2.Color = "Red"
Next