2010-11-16 18 views
14

Ho una lista (Of MyType) e vorrei usare LINQ per ottenere un sottoinsieme della lista.Come utilizzare. Nella lista generica

Su MyType c'è un campo chiamato AccountNumber. Posso usare LINQ per dire qualcosa di simile?

Dim t As List(Of MyType) 
t = GetMyTypes() 
t = t.Where(AccountNumber = "123") 

Grazie

risposta

30

Ci siamo quasi. L'argomento di Where deve essere una funzione, in modo che il codice dovrebbe essere simile a questo:

Dim t As List(Of MyType) 
t = GetMyTypes() 
Dim result = t.Where(Function(x) x.AccountNumber = "123") 

In alternativa, è possibile utilizzare la sintassi LINQ verbose:

Dim result = From t In GetMyTypes() Where t.AccountNumber = "123" 

Il tipo di dati restituito non è a List(Of MyType) ma a IEnumerable(Of MyType), quindi non è possibile assegnarlo direttamente a una variabile dichiarata come List(Of MyType). Se si desidera creare un elenco, è possibile "convertirlo" utilizzando result.ToList(). Ciò causerebbe anche il list to be evaluated immediately.

+0

Non sono sicuro se è possibile aggiungere a questo ... Non aggiungere un .Primo a .Where() rendere questo un po 'meglio? – Feign

+2

@Feign: Dipende veramente da cosa vuoi ottenere: se vuoi la ** prima ** entrata con numero di conto '123', usa' Primo' (aggiungere una clausola 'Order By' potrebbe essere utile in quel caso, anche se). Se si desidera ** un elenco di tutte le voci ** con numero di conto '123', utilizzare' ToList'. – Heinzi

+1

grazie! Non sapevo che tu usassi. Dove() in questo modo. – Feign

Problemi correlati