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,所以看起来旧版本确实生成了一条语句?
这个问题在EF 6.1中得到了修复,因此通过升级您将获得更好的生成查询。
如果你不能升级,也许你可以重写c#代码来强制EF生成一个更好的SQL查询。
DbContext.Users.Count()> 0
这将比另一个更好,但比EF 6.1生成的查询差。