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