EntityFramework Any生成两条EXISTS sql语句

本文关键字:两条 EXISTS sql 语句 Any EntityFramework | 更新日期: 2023-09-27 17:52:42

我想使用LINQ 'Any'方法与EntityFramework检查记录的存在。

即使是最基本的查询:

DbContext.Users.Any()
EF生成的SQL语句如下:
SELECT CASE 
WHEN (EXISTS (SELECT 1 AS [C1] FROM [dbo].[User] AS [Extent1])) THEN cast(1 as bit) 
WHEN (NOT EXISTS (SELECT 1 AS [C1] FROM [dbo].[User] AS [Extent2])) THEN cast(0 as bit) 
END AS [C1]

我可以强制EF生成一个EXISTS语句吗?

SELECT
    (CASE
        WHEN EXISTS(
            SELECT NULL AS [EMPTY]
            FROM [User] AS [t0]
            ) THEN 1
        ELSE 0
     END) AS [value]

更新

在下面的链接中,EF生成一个EXISTS语句:http://www.growingwiththeweb.com/2013/04/use-any-in-your-linq-to-sql-queries.html.

我使用的是EF 6.1.0,所以看起来旧版本确实生成了一条语句?

EntityFramework Any生成两条EXISTS sql语句

这个问题在EF 6.1中得到了修复,因此通过升级您将获得更好的生成查询。

如果你不能升级,也许你可以重写c#代码来强制EF生成一个更好的SQL查询。

DbContext.Users.Count()> 0

这将比另一个更好,但比EF 6.1生成的查询差。