使用LINQ时,.Select,.Any和.Count有什么区别 使用.Count时是否会像在SQL select count(*)中那样获得性能? 是.Any表现得更快?
谢谢!
答案 0 :(得分:10)
Count
需要迭代整个集合,因为它(显然)需要计算实例数。
Any
找到第一次出现&返回true或false。如果没有,那么它需要迭代整个集合来尝试查找,但是如果第一个实例匹配则它只需要检查第一个实例。
Select
完全不同。它用于将集合投影到另一个集合中。它不执行任何检查或过滤。
编辑:在SQL术语中,Any
与Exists
类似,而Count
与Count(*)
类似。
如果我想知道今天街上是否有人,那么完全不必要地计算所有人,并查看数字是否> = 1.我找到一个人然后就完成了
答案 1 :(得分:2)
根据运营商的具体情况而定:
Select
将项目放入IQueryable<T>
,在您访问该集合之前,它本身在技术上不会做任何事情;但是,速度将取决于被查询的集合。
Count
枚举整个集合,获取集合中的项目数量,因此对于大型集合,这将是“慢”。
Any
返回true或false。
答案 2 :(得分:0)
我将使用发票作为项目列表或集合。所以你会更好地看到差异。
invoices.Count()
返回一个整数,其中包含列表中的项目(发票)总数。
invoices.Any()
返回一个布尔值。 真:如果列表中至少有一项(发票),假:如果列表中没有一项(发票)。
invoices.Select(x => x.Number)
只返回一个没有更多元素的“数字”列表。
通过上面的示例,您可以看到:Count、Any 和 Select 之间的区别。
如果您想了解更多关于这些功能的信息,您可以阅读以下参考资料: