Фильтр linq поиск по значениям
Я хотел бы отфильтровать 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 ответ
Решение
Проблема с кодом, который вы разместили, состоит в том, что вы получаете все статьи с тем же идентификатором, что и любая статья, имеющая соответствующий индекс города. Если вы сначала распакуете группы, проблем не будет.
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);