在C#中,我有一个带有name和surname属性的对象,并创建了这些对象的列表List<person>
。
我想基于姓名和姓氏来过滤这个List<person>
,但是在列表中有些人可以将姓氏设为null,所以我只想在name不为null时过滤名称并且仅当姓氏不为空时才为姓。
我无法使用findall执行此操作,因为它只接受谓词
m_cPersons.FindAll(q => q.Name != null && q.Name.ToUpper().Contains(name));
如何添加两个谓词?
答案 0 :(得分:2)
使用LINQ List<T>.FindAll(...)
扩展方法:
Where(Func<TSource,bool> predicate)
方法
m_cPersons.Where(q => q.Name != null && q.Name.ToUpper().Contains(name));
答案 1 :(得分:1)
如果我正确理解了这个问题,您可以使用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().Contains(...)
更可靠(参见Case insensitive 'Contains(string)')。