LINQ方法来实现这个代码

时间:2010-08-10 13:19:17

标签: c# linq

我现在有一个方法循环遍历业务对象列表(属性属性),以测试属性SerialNumber是否是序列号。如果我找到一个序列号,我退出循环并返回true,否则我返回false。

代码如下:

  public bool HasSerialNumber()
  {
      if (this.Properties != null && this.Properties.Count > 0)
      {
          foreach (var property in Properties)
          {
              if (!string.IsNullOrEmpty(property.SerialNumber))
                  return true;
          }
      }
      return false;
  }

对此有更好的LINQ方法吗?

我记得以下几点:

return Properties.Where(x => !string.IsNullOrEmpty(x.SerialNumber)).ToList().Count > 0;

是否有更好/更快的方法来检查非空字符串?

4 个答案:

答案 0 :(得分:12)

您可以使用Any代替检查计数是否大于零。

return Properties.Any(x => !string.IsNullOrEmpty(x.SerialNumber))

当然,您的Properties.Count > 0检查是多余的。

答案 1 :(得分:9)

结帐IEnumerable<T>.Any()

public bool HasSerialNumber()
{
    if(this.Properties != null)
        return Properties.Any(p => !string.IsNullOrEmpty(p.SerialNumer));
    return false;
}

答案 2 :(得分:6)

我认为你不会特别改善string.IsNullOrEmpty()的效果,但你要避免的一个陷阱是你的查询的最后两次调用 - 特别是ToList()和{{1} }。

你正在做的是迭代每个元素,将它转换为一个列表(创建一个列表并在过程中添加项目,然后迭代列表中的每个元素来计算有多少元素 - 所有都要检查是否单个值为空。

您可以使用Count()方法查找单个元素是否符合某些条件,如下所示:

Any

答案 3 :(得分:3)

这应该可以解决问题:

return Properties.Any(x => !string.IsNullOrEmpty(x.SerialNumber));