我正在尝试解决我需要过滤保存自定义引用对象的列表的问题。搜索条件基于嵌套属性。有关参考指南,请考虑Student
和Subject
类。
public class Student
{
public String Name {get;set;}
public List<Subject> Subjects {get;set;}
}
public Subject
{
public String Name {get;set;}
}
我不仅想要按名字搜索学生,而且同样的搜索也应该与学科名称一起使用。我有一个字段可以输入文本。对于学生用他们的名字搜索,我已经完成了:
FilteredList = Students.Where(s => s.Name.Contains(searchQuery));
现在,我还希望按主题名称搜索学生,但只想显示匹配的结果。学生可以参加很多课程,但是对“化学”的询问应该只显示正在修读这门课程的学生,但是应该忽略他们正在学习的其他课程。
基本上我的FilteredList
与ListView
绑定,Subjects
列表应该只包含匹配的结果。我将原始资源保留为Students
。任何实施此搜索的帮助都非常感谢。
答案 0 :(得分:0)
在这种情况下,您可以使用LINQ函数Any
。这样的东西应该给你缩进的结果:
FilteredList = Students.Where(s => s.Subjects.Any(subs => subs.Name.Contains(subjectSearchQuery))
如果您想同时使用这两个过滤器,可以链接
FilteredList = Students.Where(s => s.Name.Contains(searchQuery))
.Where(s => s.Subjects.Any(subs => subs.Name.Contains(subjectSearchQuery))
编辑:似乎我理解错误的问题,这就是我认为正确的答案(参见对此答案的评论)
在此,您希望以这样的方式使用Select
:
FilteredList = Students.Where(s => s.Name.Contains(studentNameFilter))
.Select(s => new Student()
{
Name = s.Name,
subjects = s.Subjects.Where(sub => sub.Name.Contains(subjectNameFilter))
});
这可以为您提供所需的结果。