EntityFramework Any生成两个EXISTS sql语句

时间:2015-06-02 09:18:32

标签: c# sql-server linq entity-framework

我想使用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,所以看起来旧版本确实产生了一个声明吗?

1 个答案:

答案 0 :(得分:0)

这已在EF 6.1中修复,因此只需升级即可获得更好的生成查询。

如果无法升级,也许您可​​以重写C#代码以强制EF生成更好的SQL查询。

DbContext.Users.Count()> 0

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