根据值过滤linq查找

时间:2011-02-09 21:09:50

标签: linq-to-objects ilookup

我想基于其值来过滤linq Lookup:

查找:

ILookup<int, Article> lookup

这是我到目前为止所做的不起作用:

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);

只是为了澄清:我希望获得上述城市索引列表中包含的城市索引的所有文章。

1 个答案:

答案 0 :(得分:6)

您发布的代码存在的问题是,您获得的所有文章与具有匹配城市索引的任何文章具有相同的ID。如果你先打开组,那就没问题了。

IList<int> cityIndexes = GetCityIndexesByNames(cities);

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

或者

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