2011-02-09 6 views
3

Je voudrais filtrer une LINQ de recherche en fonction de ses valeurs:filtre LINQ recherche basé sur des valeurs

la recherche:

ILookup<int, Article> lookup 

Voici ce que j'ai à ce jour qui ne fonctionne pas:

IList<int> cityIndexes = GetCityIndexesByNames(cities);  

lookup = lookup 
       .Where(p => p.Any(x => cityIndexes.Contains((int)x.ArticleCity))) 
       .SelectMany(l => l) 
       .ToLookup(l => (int)l.ArticleParentIndex, l => l); 

juste pour clarifier: Je veux tous les articles avec un indice de la ville qui est contenu dans la liste des index des villes ci-dessus.

Répondre

5

Le problème avec le code que vous avez posté, c'est que vous obtenez tous les articles avec le même ID que tout article qui a un index de ville correspondant. Si vous déballez d'abord les groupes, il n'y a pas de problème.

IList<int> cityIndexes = GetCityIndexesByNames(cities); 

lookup = lookup 
    .SelectMany(g => g) 
    .Where(article => cityIndexes.Contains((int)article.ArticleCity))) 
    .ToLookup(article => (int)article.ArticleParentIndex); 

Ou

lookup = 
(
    from g in lookup 
    from article in g 
    where cityIndexes.Contains((int)article.ArticleCity))) 
    select article 
).ToLookup(article => (int)article.ArticleParentIndex); 
+0

Merci beaucoup pour avoir éclairci ce point, désolé que je ne peux pas vous voter en ... :( – user560498

Questions connexes