gpt4 book ai didi

c# - Where(condition).Any() 和 Any(condition) 是否等价

转载 作者:太空狗 更新时间:2023-10-29 22:17:00 28 4
gpt4 key购买 nike

在我看到的使用 Any 方法的 Linq 查询示例中,大约有一半是通过将其应用于 Where() 调用的结果来实现的,另一半则直接将其应用于集合。这两种样式是否总是等效的,或者在某些情况下它们可能会返回不同的结果?

我的测试支持前一个结论;但边缘情况并不总是很容易找到。

List<MyClass> stuff = GetStuff();
bool found1 = stuff.Where(m => m.parameter == 1).Any();
bool found2 = stuff.Any(m => m.parameter == 1);

最佳答案

归结为两个重要问题:

  • 它是标准的“Where”/“Any”(例如 Enumerable.* 或 Queryable.*),还是自定义的? (如果是后者,则所有赌注均无效)
  • 如果它是可查询的。*,提供者是什么?

后者非常重要。例如,LINQ-to-SQL 和 LINQ-to-EF 对 Single 的行为不同,因此我不会假设它们对 Any 的行为相同。一个更深奥的提供者可以做任何事情。但更多:LINQ-to-SQL 为 Single(predicate) 与 Where(predicate).Single(以及 First 也是)做不同的事情(重新身份管理器)。事实上,根据 3.5、3.5SP1 或 4.0,LINQ-to-SQL 中有 3 种不同行为可用。

此外,IIRC LINQ-to-ADO.NET-Data-Services 对 EF 有不同(相反,来自内存)支持 - 所以(再次来自内存)而一个提供者仅支持 Single(predicate ), 另一个只支持 Where(predicate).Single();建议 Any() 可能受到不同提供者的类似影响并不是一个很大的飞跃。

所以:虽然 Any(predicate) 和 Where(predicate).Any() 是语义上等价的 - 如果没有实际上它们是相同的是不可能的em>非常详细的上下文信息。

关于c# - Where(condition).Any() 和 Any(condition) 是否等价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7533119/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com