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

时间:2011-05-18 00:57:05

标签: linq

使用LINQ时,.Select,.Any和.Count有什么区别 使用.Count时是否会像在SQL select count(*)中那样获得性能? 是.Any表现得更快?

谢谢!

3 个答案:

答案 0 :(得分:10)

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

Any找到第一次出现&返回true或false。如果没有,那么它需要迭代整个集合来尝试查找,但是如果第一个实例匹配则它只需要检查第一个实例。

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

编辑:在SQL术语中,AnyExists类似,而CountCount(*)类似。

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

答案 1 :(得分:2)

根据运营商的具体情况而定:

Select将项目放入IQueryable<T>,在您访问该集合之前,它本身在技术上不会做任何事情;但是,速度将取决于被查询的集合。

Count枚举整个集合,获取集合中的项目数量,因此对于大型集合,这将是“慢”。

如果集合包含任何项目并且只需要检查第一个项目是否返回true,则

Any返回true或false。

答案 2 :(得分:0)

我将使用发票作为项目列表或集合。所以你会更好地看到差异。

invoices.Count() 返回一个整数,其中包含列表中的项目(发票)总数。

invoices.Any() 返回一个布尔值。 真:如果列表中至少有一项(发票),假:如果列表中没有一项(发票)。

invoices.Select(x => x.Number) 只返回一个没有更多元素的“数字”列表。

通过上面的示例,您可以看到:Count、Any 和 Select 之间的区别。

如果您想了解更多关于这些功能的信息,您可以阅读以下参考资料:

  1. Count() https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.count?view=net-5.0
  2. Any() https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.any?view=net-5.0
  3. Select() https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.select?view=net-5.0