它们相等但不相等
它们将返回相同的结果,但编译器会生成不同的 IL。(即使在发布模式下也不会优化。)
对于此代码:
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication3
{
class Program
{
static void Main()
{
var _champs = new List<Champ>();
var noPage = 0;
var q = _champs.Where(a => a.NoPage == noPage + 1).Any();
}
}
}
而对于这个:
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication3
{
class Program
{
static void Main()
{
var _champs = new List<Champ>();
var noPage = 0;
var q = _champs.Any(a => a.NoPage == noPage + 1);
}
}
}
虽然这对于 LinqToOjects 实际上不是问题,并且对于许多像 EntityFramework 这样的 ORM 来说,它只会生成一次对数据库的调用,但请记住,技术上可能一些未优化的 ORM 可能会生成两次对数据库的调用,因为有两个方法调用,虽然我没有看过或找到任何东西。
总是喜欢第二个,因为它比第一个更安全。