例如,如果我有一个Linq to SQL数据上下文,或者我有ADO.NET实体框架实体映射到数据库表,我想测试一个客户...
之间存在很大差异:
MyDatabaseContext.Customers.Any(c => c.CustomerId == 3)
和
MyDatabaseContext.Customers.Where(c => c.CustomerId == 3)
。任何<> - 返回类型bool
。凡<> - 返回类型IQueryable
编辑:在接受FredrikMörk的回答后更正了问题措辞 - 谢谢。
答案 0 :(得分:15)
再次查看文档:
Any
一旦确定结果(当找到匹配的项目时)就停止,可能会有性能差异,而Where
需要在返回之前始终循环所有项目结果。因此,如果您只需要检查是否有任何匹配的项目,Any
将是该作业的方法。
答案 1 :(得分:3)
Any
返回bool
,Where
返回IQueryable
。懒惰,只要找到一个满足元素(返回true),就会期望Any
终止,而Where
将搜索所有元素。
如果您想选择一位客户,Single
就是您要找的。 p>
答案 2 :(得分:2)
Any()
返回一个bool。即有没有符合条件的元素。如果您只想知道是否有要使用的元素,请使用Any()
。例如。例如,更喜欢Any()
而不是Count() == 0
,因为后者可能会枚举整个序列以查明它是否为空。
Where()
返回与条件匹配的元素序列。
答案 3 :(得分:2)
Any<>
检查是否有任何项目符合标准,即返回bool
,这意味着它只需找到第一项,这可能非常快。而Where<>
枚举满足条件的所有项目,这意味着它必须迭代整个集合。
答案 4 :(得分:1)
任何测试lambda / predicate并返回true / false
返回lambda / predicate为true的对象集合为IQueryable