Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有多个谓词的linq findall_C#_Linq_Predicates - Fatal编程技术网

C# 具有多个谓词的linq findall

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谓词)扩展方法代替

在C#中,我有一个具有name和姓氏属性的对象,并创建了这些对象的列表,
list

我想根据姓名和姓氏筛选此
列表
,但在列表中,有些人的姓氏可能为空,因此我只想在姓名不为空时筛选姓名,在姓氏不为空时筛选姓氏

我不能用findall来做,因为它只接受一个谓词

m_cPersons.FindAll(q => q.Name != null && q.Name.ToUpper().Contains(name)); 
如何添加两个谓词?

使用LINQ
Where(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()包含(…)
更可靠(请参阅)