我想使用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,所以看起来旧版本确实产生了一个声明吗?
答案 0 :(得分:0)
这已在EF 6.1中修复,因此只需升级即可获得更好的生成查询。
如果无法升级,也许您可以重写C#代码以强制EF生成更好的SQL查询。
DbContext.Users.Count()> 0
这将比另一个更好,但比EF 6.1生成的查询更差。