Linq回归过滤的孩子

时间:2009-12-07 14:07:30

标签: c# linq collections filter

我有一个“呃”的时刻,这似乎应该是直截了当的,但我似乎无法做到正确。我有一个简单的集合:

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 个答案:

答案 0 :(得分:6)

您需要调用Select并返回已过滤的子列表,如下所示:

var v = vm.CategoryList
          .Select(p => new { p.CategoryName, CategoryItems = p.CategoryItems.Where(q => q.Name.Contains(SearchText)))
          .Where(p => p.CategoryItems.Any()));