【问题标题】:Predicate Criteria Not Working When Adding From List<int>从 List<int> 添加时谓词条件不起作用
【发布时间】:2016-07-03 15:30:10
【问题描述】:

我有int 的列表,它们对应于许多合同的 ID。这个想法是用户可以添加一个“最喜欢的”Contract,然后将其 ID 存储在数据库中。我检索那个人的列表,然后过滤掉DataGrid,所以只有最喜欢的Contract 显示。

如果我将硬编码的ID 添加到Predicates 的列表中,就没有问题,就像这样;

criteria.Clear();
if (favouritesCheckBox.IsChecked == true)
{
    criteria.Add(new Predicate<ContractModel>(x => x.ID == 6966));
}

但是,当我尝试从包含IDsList&lt;int&gt; 添加时。我就是这样做的;

if (favouritesCheckBox.IsChecked == true)
{
    for (int i = 0; i <= 48; i++)
    {
        if (favouriteContractList[i] != 0)
        {
            criteria.Add(new Predicate<ContractModel>(x => x.ID == favouriteContractList[i]));
        }
    }
}

从一开始就有一些事情让我感到困惑。首先,favouriteContractList.Count 的结果是50,但是我做不到for (int i = 0; i &lt;= 50; i++)。其次,我已经在整个循环中打印出favouriteContractList[i].ToString(),并且IDs 的存储似乎没有问题。但是,当我检查我的ComboBox 以过滤DataGrid 时,当我尝试这样做时,我只剩下一个空网格。

【问题讨论】:

  • 它在 .NET 3.5 上吗?
  • 不回答您的问题,但首先会简化并避免一些问题,请使用 foreach(int num in favouriteContractList.Where(n => n != 0) ) { criteria.Add(new Predicate (x => x.ID == num); }
  • @sll 感谢您的帮助,我会添加它以避免混淆。

标签: c# wpf list datagrid predicate


【解决方案1】:

尝试将 favouriteContractList[i] 放入变量中,如下所示:

if (favouritesCheckBox.IsChecked == true)
{
    for (int i = 0; i <= 48; i++)
    {
        int id = favouriteContractList[i];
        if (id != 0)
        {
            criteria.Add(new Predicate<ContractModel>(x => x.ID == id));
        }
}

与它延迟构建它的方式有关,导致它无法像您想象的那样解决。当它开始实际使用它时,它可能认为“i”是 49。这可以解释为什么你不能让 'i' 超过 49 - 它会超出列表中 50 个整数的范围。

我刚刚注意到您说您有 50 个项目并且不能执行“i

【讨论】:

  • 不幸的是,仍然没有运气,感谢您的回答。我仍然可以像在我的问题中演示的那样对 ID 进行硬编码,并且效果很好,只是似乎不想从列表中添加 ID...
猜你喜欢
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
相关资源
最近更新 更多