我有一个“呃”的时刻,这似乎应该是直截了当的,但我似乎无法做到正确。我有一个简单的集合:
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)));
这将过滤并返回包含与过滤器匹配的类别项的所有类别名称,但我仍然可以获得未过滤的整个子类别列表。我错过了什么?
答案 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()));