1

在 C# 中,我有一个具有 name 和 surname 属性的对象,并创建了这些对象的列表,List<person>.

我想List<person>根据姓名和姓氏对其进行过滤,但是在列表中,有些人的姓氏可能为空,所以我想仅在名称不为空时过滤名称,仅在不为空时过滤姓氏.

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

m_cPersons.FindAll(q => q.Name != null && q.Name.ToUpper().Contains(name)); 

如何添加两个谓词?

4

2 回答 2

2

代替List<T>.FindAll(...)方法,使用 LINQWhere(Func<TSource,bool> predicate)扩展方法:

m_cPersons.Where(q => q.Name != null && q.Name.ToUpper().Contains(name));
于 2014-09-07T10:00:36.200 回答
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(...)(请参阅不区分大小写的 'Contains(string)')更可靠。

于 2014-09-07T10:00:39.423 回答