向谓词列表中添加多个条件
本文关键字:条件 添加 谓词 列表 | 更新日期: 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 == 0
和CurrentStatus == 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 ) ) );
}