我正在尝试了解 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/