向谓词列表中添加多个条件

本文关键字:条件 添加 谓词 列表 | 更新日期: 2023-09-27 18:28:00

我有一个Companies,我正试图使用criteria对其进行筛选。每个Company都有一个CurrentStatus,每当用户检查CheckBox来定义过滤器时,就会调用过滤方法。除了一件事之外,我现在几乎完全按照我想要的方式工作。这就是我所拥有的;

    private void FilterCompanyType(object sender, RoutedEventArgs e)
    {
        criteria.Clear();
        if (currentCheckBox.IsChecked == true)
        {
            criteria.Add(new Predicate<CompanyModel>(x => x.CurrentStatus == 1));
        }
        if (nonCurrentCheckBox.IsChecked == true)
        {
            criteria.Add(new Predicate<CompanyModel>(x => x.CurrentStatus == 0));
        }
        foreach (CheckBox checkBox in companyFilters.Children)
        {
            if (!CheckCheckBoxes())
            {
                dataGrid.ItemsSource = null;
                compDetailsLabel.Content = string.Empty;
            }
            else
            {
                dataGrid.ItemsSource = CompanyICollectionView;
                CompanyICollectionView.Filter = dynamic_Filter;
                SetSelectedCompany(selectedIndex);
                dataGrid.SelectedIndex = 0;
            }
        }
    }

正如我所说,这还可以,它适用于用户想要查看Companies的列表(其中CurrentStaus == 1)或Companies的列表(此处CurrentStatus == 0)。然而,如果在CurrentStatus == 0CurrentStatus == 1处检查了两个CheckBoxes,则当前用户无法看到Companies的列表。

我已经尝试添加此项,但在选中两个CheckBoxes时都不起作用;

if (nonCurrentCheckBox.IsChecked == true && currentCheckBox.IsChecked == true)
{
    criteria.Add(new Predicate<CompanyModel>(x => x.CurrentStatus == 0));
    criteria.Add(new Predicate<CompanyModel>(x => x.CurrentStatus == 1));
}

这只是返回一个空的DataGrid。如何更改Predicate以同时允许两者?

向谓词列表中添加多个条件

如果我清楚地理解,if语句应该是这样的。

if ( currentCheckBox.IsChecked == true && nonCurrentCheckBox.IsChecked == false )
{
    criteria.Add( new Predicate<CompanyModel>( x => x.CurrentStatus == 1 ) );
}
else if ( nonCurrentCheckBox.IsChecked == true && currentCheckBox.IsChecked == false )
{
    criteria.Add( new Predicate<CompanyModel>( x => x.CurrentStatus == 0 ) );
}
else if ( nonCurrentCheckBox.IsChecked == true && currentCheckBox.IsChecked == true )
{
    criteria.Add( new Predicate<CompanyModel>( x => ( x.CurrentStatus == 0 || x.CurrentStatus == 1 ) ) );
}