c# - 如何从 linq 或 IQueryable 对象获取可执行的 sql 语句?

标签 c# entity-framework linq

当我调试代码时,我总是使用 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/

相关文章:

c# - EF不会在SaveChanges上更新相关实体

c# - 如何引用不同的模式而不对其进行硬编码

c# - 在 TPL 数据流中,是否可以在创建 block 之后但在使用之前更改 DataflowBlockOptions?

c# - Entity Framework 插入多个对象

c# - C# 中的类设计 - DAL

c# - EF代码优先。相关实体未加载

c# - 努力.Exceptions.EffortException : Database has not been initialized - after non commited update?

c# - 在 C# 中使用 linq 计算 IEnumerable 中项目的出现次数

c# - Linq GroupBy 匿名类型错误 MVC4

c# - Linq-to-SQL 3 表,获取结果为 List<string>