bil*_*llb 1 c# linq collections filter
我有一个"呃"的时刻,这似乎应该是直截了当的,但我似乎无法做到正确.我有一个简单的集合:
Category Name
---> List<Category> (Children of this category)
Run Code Online (Sandbox Code Playgroud)
我希望用户能够在维护层次结构的同时基于Category.Name进行过滤.所以举个例子.
My Category
---> Category.Name, "ABC"
---> Category.Name, "123"
---> Category.Name, "CDE"
Run Code Online (Sandbox Code Playgroud)
如果用户键入C,则应返回过滤器
My Category
---> Category.Name, "ABC"
---> Category.Name, "CDE"
Run Code Online (Sandbox Code Playgroud)
到目前为止我的尝试一直是
var v = vm.CategoryList
.Where(p => p.CategoryItems.Any(q => q.Name.Contains(SearchText)));
Run Code Online (Sandbox Code Playgroud)
这将过滤并返回包含与过滤器匹配的类别项的所有类别名称,但我仍然获得未过滤的整个子类别列表.我错过了什么?
您需要调用Select
并返回已过滤的子列表,如下所示:
var v = vm.CategoryList
.Select(p => new { p.CategoryName, CategoryItems = p.CategoryItems.Where(q => q.Name.Contains(SearchText)))
.Where(p => p.CategoryItems.Any()));
Run Code Online (Sandbox Code Playgroud)