当我调试代码时,我总是使用 query.ToString() 来获取 sql 语句,但是 sql 语句包含许多 linq 参数,如 @p__linq__0
,@p__linq__1
, @p__linq__2
等等。不能直接在Sql Server Management studio中执行,需要将@p__linq__0
替换为实际参数值。这是cockamamie!那么,如何从 linq 或 IQueryable
对象中获取可执行的 sql 语句呢?非常感谢!
sql总是如下:
SELECT *
FROM [dbo].[Customers] AS [Extent1]
WHERE ([Extent1].[IsCuepool] = @p__linq__0) AND
([Extent1].[IsInvalid] = @p__linq__1) AND
([Extent1].[IsRecovery] = @p__linq__2) AND
(([Extent1].[CustomerName] LIKE @p__linq__3 ESCAPE N'~') OR
([Extent1].[QQ] LIKE @p__linq__4 ESCAPE N'~') OR
([Extent1].[Phone] LIKE @p__linq__5 ESCAPE N'~') OR
([Extent1].[BFAccount] LIKE @p__linq__6 ESCAPE N'~')) AND
(([Extent1].[CreateAt] = (LOWER(CASE WHEN (@p__linq__7 IS NULL) ......
最佳答案
你不能得到没有参数的语句。创建 SQL 的目的不是为了使其易于复制、粘贴和执行,而是为了确保运行查询的安全性。使用参数而不是组合的 SQL 查询是防止 SQL 注入(inject)的重要安全功能,因此事情之所以如此是有充分理由的。
关于c# - 如何从 linq 或 IQueryable 对象获取可执行的 sql 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46191428/