【问题标题】:Double filter with lambda expression带有 lambda 表达式的双过滤器
【发布时间】:2013-08-25 08:11:36
【问题描述】:

我正在 WPF 中创建产品编辑表单。此表单具有以下属性的文本框:IdCodeWidthHeightColor

IdCode 不能重复,所以我想在我的Code_TextChanged 事件中对Code 重复“检查”。

我已尝试使用以下 lambda 表达式进行检查:

// List<Product> products = …;
if (products.Where(x => x.code.Equals(Code.Text))
            .Count(g => !g.id.Equals(Id.Text)) > 0)
    CodeExist = true;

我不知道为什么,当我打开一个寄存器时,它会将CodeExist标记为true。

如何为过滤器product.code.Equals(Code.Text)!product.id(Id.Text) 设置条件?

【问题讨论】:

  • 离题:1. 使用items.Count(…) &gt; 0,而不是items.Any(…)。它可能会表现得更好,因为不必计算确切的计数。 2. 关于 lambda 函数的参数名称,我想知道您为什么选择 xg,而不仅仅是 p(或 product),这似乎更容易跟随,给定一个名为 products 的集合。 3. 如果您想要一个双重过滤器 (.Where),没有什么能阻止您在查询中简单地链接两个 .Wheres 的明显解决方案(即使它不会最优解)。

标签: c# linq filtering


【解决方案1】:

您可以使用“&&”(相当于SQL中的“AND”)或“||”来添加多个条件(相当于 SQL 中的“OR”)。

如果集合中的一个或多个元素匹配某个条件,您还可以使用 LINQ“Any()”方法返回 true。

所以你的 if 语句应该是:

if(products.Any(x=>x.code.Equals(Code.Text) && !x.id.Equals(Id.Text))){
     CodeExists = true;
}

编辑:修正了带有“!”的小错字位置。

【讨论】:

  • 抱歉,小错误。这 ”!”在“x”之前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 2019-07-26
  • 2014-11-06
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
相关资源
最近更新 更多