C# 具有多个谓词的linq findall
在C#中,我有一个具有name和姓氏属性的对象,并创建了这些对象的列表,C# 具有多个谓词的linq findall,c#,linq,predicates,C#,Linq,Predicates,在C#中,我有一个具有name和姓氏属性的对象,并创建了这些对象的列表,list 我想根据姓名和姓氏筛选此列表,但在列表中,有些人的姓氏可能为空,因此我只想在姓名不为空时筛选姓名,在姓氏不为空时筛选姓氏 我不能用findall来做,因为它只接受一个谓词 m_cPersons.FindAll(q => q.Name != null && q.Name.ToUpper().Contains(name)); 如何添加两个谓词?使用LINQWhere(Func谓词)扩展方法代替
list
我想根据姓名和姓氏筛选此列表
,但在列表中,有些人的姓氏可能为空,因此我只想在姓名不为空时筛选姓名,在姓氏不为空时筛选姓氏
我不能用findall来做,因为它只接受一个谓词
m_cPersons.FindAll(q => q.Name != null && q.Name.ToUpper().Contains(name));
如何添加两个谓词?使用LINQWhere(Func谓词)
扩展方法代替List.FindAll(…)
方法:
m_cPersons.Where(q => q.Name != null && q.Name.ToUpper().Contains(name));
如果我理解正确,您可以使用
FindAll
实现基于姓名和姓氏的过滤:
m_cPersons.FindAll(q =>
(q.Name == null ||
q.Name.IndexOf(name, StringComparison.OrdinalIgnoreCase) >= 0)
&&
(q.LastName == null ||
q.LastName.IndexOf(lastName, StringComparison.OrdinalIgnoreCase) >= 0)
);
使用IndexOf(…StringComparison.OrdinalIgnoreCase)
比ToUpper()包含(…)
更可靠(请参阅)