1

C# では、名前と姓のプロパティを持つオブジェクトがあり、これらのオブジェクトのリストを作成しましたList<person>

List<person>名前と姓に基づいてこれをフィルター処理したいのですが、リストでは姓が null である可能性があるため、名前が null でない場合にのみ名前をフィルターし、null でない場合にのみ姓をフィルター処理したいと思います。 .

述語のみを受け入れるため、findallでは実行できません

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

2 つの述語を追加するにはどうすればよいですか?

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)
);

を使用すると、(大文字と小文字を区別しない 'Contains(string)'を参照IndexOf(... StringComparison.OrdinalIgnoreCase)) よりも信頼性が高くなります。ToUpper().Contains(...)

于 2014-09-07T10:00:39.423 に答える