Linq Вернуться Отфильтрованные дети - PullRequest
1 голос
/ 07 декабря 2009

У меня момент "дух", когда кажется, что все должно быть прямо, но я не могу понять, что это правильно. У меня есть простая коллекция:

Category Name
   ---> List<Category>  (Children of this category)

Я хочу, чтобы пользователь мог фильтровать на основе Category.Name при сохранении иерархии. Так, например.

My Category
  ---> Category.Name, "ABC"
  ---> Category.Name, "123"
  ---> Category.Name, "CDE"

Если пользователь вводит C, фильтр должен вернуть

My Category
  ---> Category.Name, "ABC"
  ---> Category.Name, "CDE"

Моя попытка до сих пор была

var v = vm.CategoryList
        .Where(p => p.CategoryItems.Any(q => q.Name.Contains(SearchText)));

Это отфильтрует и вернет мне все имена категорий, которые содержат элементы категорий, которые соответствуют фильтру, но я все еще получаю весь список дочерних категорий без фильтра. Чего мне не хватает?

1 Ответ

6 голосов
/ 07 декабря 2009

Вам нужно позвонить Select и вернуть отфильтрованный дочерний список, например:

var v = vm.CategoryList
          .Select(p => new { p.CategoryName, CategoryItems = p.CategoryItems.Where(q => q.Name.Contains(SearchText)))
          .Where(p => p.CategoryItems.Any()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...