使用LINQ时,.Select,.Any和.Count有什么区别

Ale*_*lex 5 linq

使用LINQ时.Select,.Any和.Count之间有什么区别使用.Count就像在SQL select count(*)中一样,性能受到了什么影响?是吗.Any表现得更快?

谢谢!

Kir*_*rst 10

Count 需要迭代整个集合,因为它(显然)需要计算实例数.

Any找到第一个匹配项并返回true或false.如果没有,那么它需要迭代整个集合以尝试查找,但如果第一个实例匹配则它只需要检查第一个实例.

Select完全不同.它用于将集合投影到另一个集合中.它不执行任何检查或过滤.

编辑:在SQL而言,Any就像是Exists,而CountCount(*).

如果我想知道今天街上是否有人,那么完全不必要地计算所有人,看看数字是否> = 1.一旦找到一个人,我就完成了.

  • 这不完全正确.这一切都取决于LINQ Provider(省略).在迭代之前,LINQ to Objects提供程序会尝试将`IEnumerable <T>`安全地转换为`ICollection <T>`.如果成功,则返回Collection的Count属性.此外,任何体面的数据访问提供程序都会解释Count查询表达式并将其转换为相应的`select count(*)` (3认同)