c# - 两个选择计数查询之间的linq差异

标签 c# linq

我正在尝试了解 linq 查询。我有一个包含 8 个元素的列表 _taskDetail。我不明白为什么下面的第一个查询返回答案 8?是的,该列表包含 8 个元素,但所有 td.Names 都不同,我已经指定了 td.Name == taskName 那么为什么它返回所有内容,甚至是 td.Name 不等于 taskName 的元素?

第二个查询给了我预期的正确答案 1。

  var Ans1 = _taskDetail.Select(td => td.Name == taskName).Count();

  var Ans2 = (from tdList in _taskDetail
                   where tdList.Name == taskName
                   select tdList).Count();


  Ans1 = 8
  Ans2 = 1

最佳答案

第一个版本没有意义,你需要一个Where , 而不是 Select这是一个投影,而不是一个过滤器。

在第一个版本中,Select 将返回一个 IEnumerable<bool>。 (对于列表中的每个项目,如果 Name == taskName 则返回 true,否则返回 false。因此所有项目都将返回,计数将为您提供……列表的计数。

所以

_taskDetail.Where(td => td.Name == taskName).Count();

顺便说一句,你可以简单地做

_taskDetail.Count(td => td.Name == taskName);

细节可能会更好地理解

对应于您的实际(错误)第一个版本(方法语法)的第二个(错误)版本(查询语法)将是

(from tdList in _taskDetail
 select tdList.Name == taskName).Count();

关于c# - 两个选择计数查询之间的linq差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24693050/

相关文章:

c# - 通用存储库 - IRepository<T> 或 IRepository

C# : Generic factory object instantiation by passing type (type retrieved from another static object)

C# 编程风格问题 - 在实际赋值之前赋值 Null

c# - 为什么以及如何 `a+++b` 被解释为 `(a++) + b` 而不是 `a + (++b)` ?

c# - 正则表达式或不匹配

c# - 使用 Linq 将项目添加到列表

c# - 尝试在 Linq 中使用包含时出错

c# - 在并行处理循环中使用单线程对象列表

c# - Linq 和交叉产品

c# - Linq to Entities 计数子查询?