在LINQ中,.Any<>之间的主要区别/用途是什么?和。<>测试记录的存在

时间:2009-09-10 08:23:02

标签: .net linq

例如,如果我有一个Linq to SQL数据上下文,或者我有ADO.NET实体框架实体映射到数据库表,我想测试一个客户...

之间存在很大差异:

MyDatabaseContext.Customers.Any(c => c.CustomerId == 3)

MyDatabaseContext.Customers.Where(c => c.CustomerId == 3)

。任何<> - 返回类型bool

。凡<> - 返回类型IQueryable

编辑:在接受FredrikMörk的回答后更正了问题措辞 - 谢谢。

5 个答案:

答案 0 :(得分:15)

再次查看文档:

  • Any<>返回bool,表示至少有一个项目是否符合条件
  • Where<>会返回包含符合条件
  • 的项目的IEnumerable

Any一旦确定结果(当找到匹配的项目时)就停止,可能会有性能差异,而Where需要在返回之前始终循环所有项目结果。因此,如果您只需要检查是否有任何匹配的项目,Any将是该作业的方法。

答案 1 :(得分:3)

Any返回boolWhere返回IQueryable。懒惰,只要找到一个满足元素(返回true),就会期望Any终止,而Where将搜索所有元素。

如果您想选择一位客户,Single就是您要找的。

答案 2 :(得分:2)

Any()返回一个bool。即有没有符合条件的元素。如果您只想知道是否有要使用的元素,请使用Any()。例如。例如,更喜欢Any()而不是Count() == 0,因为后者可能会枚举整个序列以查明它是否为空。

Where()返回与条件匹配的元素序列。

答案 3 :(得分:2)

Any<>检查是否有任何项目符合标准,即返回bool,这意味着它只需找到第一项,这可能非常快。而Where<>枚举满足条件的所有项目,这意味着它必须迭代整个集合。

答案 4 :(得分:1)

任何测试lambda / predicate并返回true / false

返回lambda / predicate为true的对象集合为IQueryable