2009-09-27 7 views
1

j'ai une liste des noms de filtre: FILTERBYNAMESFiltrage d'une avec une autre liste exhaustive

mes résultats d'une requête éléments contiennent chacun une liste de noms: NOM

Je veux filtrer le résultat d'une prendre tous les éléments dont le nom liste contient au moins un nom dans le FILTERNAMELIST:

results= result.where(r=>r.NAMES.CONTAINS(...?)...? 

Répondre

5

Je pense que vous avez besoin de quelque chose comme:

var results = list.Where(i => i.Names 
           .Any(name => filterNameList.Contains(name))); 
4

Vous pouvez résoudre ce problème en regardant l'intersection des deux ensembles de noms.

var filteredResult = result.Where(i => i.Names.Intersect(filter).Any()); 
1

Pour limiter les énumérations du filtre, vous pouvez utiliser un HashSet ...

HashSet<string> hashedFilter = new HashSet<string>(filterByNames); 

var results = result 
    .Where(x => x.Names 
    .Any(name => hashedFilter.Contains(name)) 
); 
Questions connexes