Objectlistview过滤器组合CompositeAllFilter和CompositeAnyFilter

Objectlistview过滤器组合CompositeAllFilter和CompositeAnyFilter,filter,objectlistview,Filter,Objectlistview,我有一个objectListView作为treeview,我想过滤列表。 问题是我有很多复选框,我需要and或or条件 以下是我从示例项目中获取的代码: // Build a composite filter that unify the three possible filtering criteria List<IModelFilter> filters = new List<IModelFilter>(); if (this.checkBoxHighPriori

我有一个objectListView作为treeview,我想过滤列表。 问题是我有很多复选框,我需要and或or条件

以下是我从示例项目中获取的代码:

// Build a composite filter that unify the three possible filtering criteria

List<IModelFilter> filters = new List<IModelFilter>();

if (this.checkBoxHighPriority.Checked)
    filters.Add(
        new ModelFilter(delegate(object model) 
        { 
            return ((ServiceTask)model).Priority > 3; 
        }));

if (this.checkBoxIncomplete.Checked)
    filters.Add(
        new ModelFilter(
            delegate(object model) 
            { 
                return ((ServiceTask)model).Status != ServiceTask.TaskStatus.Complete; 
            }));

if (!String.IsNullOrEmpty(this.textBoxFilter.Text))
    filters.Add(
        new TextMatchFilter(this.olvTasks, this.textBoxFilter.Text));

olvTasks.AdditionalFilter = filters.Count == 0 ? null : new CompositeAllFilter(filters);
如果我只有4-5个组合框,这很容易,但我有10个组合框

如何比较过滤器


非常感谢

我真的不明白问题出在哪里。这似乎是一个逻辑问题,而不是编码问题。您能提供更多关于您的过滤器如何协同工作的详细信息吗?您好,我添加了Excel过滤器。现在我可以过滤我想要的。这是最简单的方法。谢谢
olvTasks.ModelFilter = new ModelFilter(delegate (object x)
{
    var myNode = x as Node;
    return x != null && ((myNode.Status == "0" || myNode.Status == "1" || myNode.Status == 2"|| myNode.Status == "4") && myNode.Breakdown == "True");
}