【问题标题】:Filter Criteria OR Instead of AND C# WPF过滤条件 OR 而不是 AND C# WPF
【发布时间】:2016-04-21 06:37:38
【问题描述】:

我目前正在根据一组 CheckBox 的选择来过滤 DataGrid。 Criteria 被添加到 Criteria 列表中,并且 DataGrid 绑定到的 ICollectionView 被适当地过滤。

如果我想在“AND”基础上进行过滤,这可以正常工作。每个工作都有一个与之关联的员工,但目前过滤器通过说show jobs where job.employee = employee 1 AND job.employee = employee2 起作用。这是目前的代码,它会像这样过滤;

        criteria.Clear();

        if (yourJobsCheckBox.IsChecked == true)
        {
            criteria.Add(new Predicate<JobModel>(x => x.ITName == yourJobsCheckBox.Tag.ToString()));
        }

        if (danJobsCheckBox.IsChecked == true)
        {
            criteria.Add(new Predicate<JobModel>(x => x.ITName == danJobsCheckBox.Tag.ToString()));
        }

        if (emilyJobsCheckBox.IsChecked == true)
        {
            criteria.Add(new Predicate<JobModel>(x => x.ITName == emilyJobsCheckBox.Tag.ToString()));
        }

        if (adamJobsCheckBox.IsChecked == true)
        {
            criteria.Add(new Predicate<JobModel>(x => x.ITName == adamJobsCheckBox.Tag.ToString()));
        }

        JobModel job = o as JobModel;
        bool isIn = true;
        if (criteria.Count() == 0)
            return isIn;
        isIn = criteria.TrueForAll(x => x(job));
        return isIn;

目前正在按ITName = tag1 AND ITName = tag2etc 的职位进行过滤。等等。一个工作永远不会有超过一个员工分配给它,所以一旦用户点击多个 CheckBox,就不可避免地不会显示任何工作。

如何更改我的过滤器,以便它以“或”为基础进行过滤?例如show jobs where job.employee = employee 1 OR job.employee = employee 2

【问题讨论】:

  • TrueForAll 有对应的TruForAny 方法吗?在这个可行的简单情况下,或者对于更复杂的情况(AND and OR),您可以使用this predicate builder
  • @stuartd 不幸的是它没有!

标签: c# wpf filter datagrid icollectionview


【解决方案1】:

你试过“任何”吗? “任何”接收一个谓词。它确定集合中的任何元素是否与特定条件匹配。

【讨论】:

  • “任何”在哪里对不起? “Any”在哪里适合我的代码?
  • isIn = criteria.ToArray().Any(x => x(job));
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 2022-01-07
  • 2018-04-22
  • 2020-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多