Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用LINQ时.Select、.Any和.Count之间有什么区别_Linq - Fatal编程技术网

使用LINQ时.Select、.Any和.Count之间有什么区别

使用LINQ时.Select、.Any和.Count之间有什么区别,linq,Linq,使用LINQ时.Select、.Any和.Count之间有什么区别 使用.Count时是否会像在SQL select Count(*)中一样获得性能提升? 有没有人跑得更快 谢谢 Count需要迭代整个集合,因为它(显然)需要计算实例的数量 Any查找第一个匹配项并返回true或false。如果没有,则需要迭代整个集合以尝试查找,但如果第一个实例匹配,则只需要检查第一个实例 Select完全不同。它用于将一个集合投影到另一个集合中。它不执行任何检查或过滤 编辑:在SQL术语中,Any类似于Exi

使用LINQ时.Select、.Any和.Count之间有什么区别 使用.Count时是否会像在SQL select Count(*)中一样获得性能提升? 有没有人跑得更快


谢谢

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

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

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

编辑:在SQL术语中,
Any
类似于
Exists
,而
Count
类似于
Count(*)


如果我想知道今天街上有没有人,把所有的人都数一数,看看这个数字是否大于等于1是完全没有必要的。只要我找到一个人,我就完了。

根据操作员的工作:

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

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

Any
如果集合包含任何项目,并且只需对第一个项目进行一次检查即可返回true或false。

我将使用发票作为项目列表或集合。因此,您将更好地看到差异

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

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

invoices.选择(x=>x.Number)
只返回一个不包含更多元素的“Number”列表

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

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

  • Count()
  • Any()
  • Select()

  • 您的意思是与任何特定的LINQ提供商合作吗?通过询问纯
    select count(*)
    之间的性能差异,我相信您的目标是某种DBMS(EntityFramework、Linq2Sql等)中的数据访问的某种提供者。你应该更具体一些,如果可能的话,还可以看一下你的提供商文档。不,我不是想针对某个特定的提供商,我只是在做一个比较。这个问题非常广泛,它们根本不相等。投票结束,这不完全正确。这完全取决于LINQ提供程序(省略)。LINQ对象提供程序将在迭代之前尝试将
    IEnumerable
    安全转换为
    ICollection
    。如果成功,则返回集合的Count属性。此外,任何像样的数据访问提供者都会解释Count查询表达式,并将其转换为相应的
    selectcount(*)