2010-11-16 23 views
14

Tengo una lista (de MyType) y me gustaría utilizar LINQ para obtener un subconjunto de la lista.Cómo utilizar .Where en lista genérica

En MyType hay un campo llamado ACCOUNTNUMBER. ¿Puedo usar LINQ para decir algo así?

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

Gracias

Respuesta

30

Ya casi ha terminado. El argumento de Where tiene que ser una función, por lo que el código debería tener este aspecto:

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

Como alternativa, puede utilizar la sintaxis de LINQ detallado:

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

El tipo de datos devuelto no es un List(Of MyType) sino una IEnumerable(Of MyType), por lo que no se pueden asignar directamente a una variable declarada como List(Of MyType). Si desea crear una lista, puede "convertir" mediante el uso de result.ToList(). Esto también causaría el list to be evaluated immediately.

+0

No estoy seguro si está bien que añadir a esto ... No sería la adición de un .First a la .Where() hacer esto un poco mejor? – Feign

+2

@Feign: Realmente depende de lo que quiere lograr: Si desea que la primera ** ** entrada con número de cuenta '123', usar' First' (agregando una cláusula 'Solicitar BY' podría ser útil en ese caso, aunque). Si desea ** una lista de todas las ** entradas con el número de cuenta '123', use' ToList'. – Heinzi

+1

gracias! No sabía que usabas. (Aquí) de esta manera. – Feign

Cuestiones relacionadas