Entity framework core 使用全部或否定任何

Entity framework core 使用全部或否定任何,entity-framework-core,entity-framework-core-2.2,Entity Framework Core,Entity Framework Core 2.2,使用Entity Framework Core 2.2,我有以下疑问: dbContext.Projects.Where(x => x.Jobs.All(y => y.UserId != userId)) dbContext.Projects.Where(x => !x.Jobs.Any(y => y.UserId == userId)) 所以我得到了所有没有任何Job的项目,其中Job.UserId等于UserId 我相信两者的功能相同,但哪一个最快?它们完全相同

使用Entity Framework Core 2.2,我有以下疑问:

dbContext.Projects.Where(x => x.Jobs.All(y => y.UserId != userId)) 

dbContext.Projects.Where(x => !x.Jobs.Any(y => y.UserId == userId))
所以我得到了所有没有任何Job的项目,其中Job.UserId等于UserId


我相信两者的功能相同,但哪一个最快?

它们完全相同,因此在任何正常的查询提供程序实现中都应该具有相同的性能

说到EF-Core,使用
notexists(subquery)
条件将两者转换为一个相同的SQL,因此执行SQL查询的性能是相同的。当然,由于SQL没有针对
All
的特殊构造(SQL
存在
==LINQ
Any
),因此
All
的翻译应该比
Any
的翻译稍微慢一点(基本上必须将其转换为
Any
的否定版本),但与执行和具体化查询的时间相比可以忽略不计

因此,一般来说,使用一个可以让你更好地阅读。我个人更喜欢
Any
,因为它自然地映射到SQL,因此有更大的机会得到查询提供者的支持。但由于EF Core同时支持这两种功能,这实际上是一个品味问题