Фильтр списка объектов объединяет CompositeAllFilter и CompositeAnyFilter - PullRequest
0 голосов
/ 03 марта 2020

У меня есть objectListView в виде дерева, и я хочу отфильтровать список. Проблема в том, что у меня много флажков, и мне нужно условие И или ИЛИ.

Вот код, который я взял из примера проекта:

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

Я могу изменить с CompositeAllFilter на CompositeAnyFilter, но я хочу комбинацию обоих:

Примерно так:

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

Если у меня всего 4-5 комбинированных блоков, это легко, но у меня есть 10 комбинированных блоков .

Как я могу сравнить фильтры?

Большое спасибо

...