2011-09-16 9 views
5
public class Test 
{ 
    int i; 
    string s; 
} 

List<Test> testList = new List<Test>(); //assume there are some values in it. 

List<int> intList = new List<int>(){ 1,2,3}; 

Cómo decir digo obtener items from testList where i is in intList usando el linq a los objetos.consulta de linq para seleccionar de una lista basada en otra

algo así como List<Test> testIntList = testList.Where(t=>t.i in intList)

Respuesta

7

Técnicamente, sería:

List<Test> testIntList = testList.Where(t => intList.Contains(t.i)).ToList(); 

Sin embargo, eso podría ser lento si intList es grande, ya que List<T>.Contains realiza la búsqueda en O (n). Un enfoque más rápido sería utilizar un HashSet<T>:

HashSet<int> intList = new HashSet<int>(){ 1,2,3 }; 
2

Esto también sería interesante y sería un buen desempeño:

List<test> finalList = testList.Join(intList, 
            test => test.id, 
            i => i, 
            (t, i) => t).ToList(); 

Usted sabe cuando se une a las tablas de una SQL SELECT? Esta es la forma de hacerlo usando Linq para objetos.

+0

No estoy seguro si entendí esto bien. ¿Cómo sabe esto lo que i => i está en esta consulta en particular? no está definido en ningún lado. –

+0

@Alex J - La expresión 'i => i' es una expresión lambda que es su propia definición. En esta consulta, dice que la unión usa los valores de 'intList'. – Enigmativity

Cuestiones relacionadas