2008-09-01 19 views
15

Tengo un List<int> y un List<customObject>. La clase customObject tiene una propiedad de ID. ¿Cómo puedo obtener un List<customObject> que contiene solo los objetos donde está la propiedad de ID en el List<int> usando LINQ?Filtro lista de linq en el valor de la propiedad

Editar: Acepté la respuesta de Konrad porque es más fácil/más intuitiva de leer.

Respuesta

16
var result = from o in objList where intList.Contains(o.ID) select o 
+0

¿No es el método Linq '.Where' más conciso? (ver mi respuesta a continuación) –

+0

@RobinWinslow Bueno, son completamente equivalentes, el mío simplemente utiliza la sintaxis de la expresión de consulta. El mío es potencialmente más legible, pero admito que (al menos en la mayoría de los casos) iría con tu variante ya que, como dijiste, es más sucinto. –

+0

Son técnicamente equivalentes, pero el método '.Where()' * mucho * más fácil de leer. Pero, por supuesto, es solo mi opinión. –

6

no probado, pero será algo como esto:

var matches = from o in objList 
        join i in intList on o.ID equals i 
        select o; 

@Konrad simplemente probado, y funciona - sólo tenía un error tipográfico en el que había escrito "i.ID" en lugar de "yo".

2

simplemente para la corrección (y tal vez es más fácil de leer?), Utilizando un "donde" similar a la de Matt "unen":

var matches = from o in customObjectList 
       from i in intList 
       where o.ID == i 
       select o; 
10

he tenido un problema similar en este momento y se utiliza la debajo de la solución. Si ya tiene la lista de objetos, puede eliminar todos los no encontrados en la lista int, dejando solo las coincidencias en objList.

objList.RemoveAll(x => !intList.Contains(x.id)); 
0

Tenga en cuenta que el uso de la unión en lugar de contiene NO funciona cuando el recuento de elementos en la lista excede 49! Obtendrá el error: Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries.

8
using System.Linq; 

objList.Where(x => intList.Contains(x.id)); 
Cuestiones relacionadas