【问题标题】:Where to find translated Linq to Entity query to Sql在哪里可以找到翻译的 Linq 到 Entity 查询到 Sql
【发布时间】:2015-12-18 11:07:23
【问题描述】:

我想以编程方式获取翻译后的 Linq 查询并使用该 Sql 语法做一些事情。

假设这是我的代码:

public class MyApiController:ApiController
{
   public IQueryable<object> Get()
   {
      var objs=Context.Objexts.Where(m=>m.Id>10);
      return objs;
   }
}

我想查找并获取如下 Sql 语法:

SELECT * FROM dbo.Objexts where Id > 10

【问题讨论】:

  • 不要做你想做的事。为什么要获取从 Linq 生成的 SQL 查询?
  • 是的,你也不明白你为什么要这样做,你可以用代码设置查询,你为什么要改变实际的查询?

标签: c# sql-server entity-framework linq asp.net-web-api


【解决方案1】:

您可以在objs 上调用ToString() 方法。这将导致调用 ToTraceString method 返回已执行的 SQL:

string sql = objs.ToString();

【讨论】:

  • ToString返回的sql会不会一直是完整的不带参数的sql语句?如果我使用 .Where(c => c == "abc'; delete from othertable;"),那么生成的 sql 是否能保证 sql 注入安全?
  • 这样一个微不足道但重要的概念。有一半的时间我们将启动 sql 查询配置文件以获取在 sql server 实例上触发的查询文本。甜!
  • 如果objs=Context.Objexts.Where(m=>m.Id>10).Sum(m=>m.num),比@Jaco怎么知道翻译好的sql?
【解决方案2】:

如果您使用的是 Entity Framework 6,另一个选项是使用新功能记录发生的事情,您可以获得 t-sql 和查询时间:

Logging and Intercepting Database Operations

using (var context = new BlogContext()) 
{ 
    context.Database.Log = Console.Write; //here, you can write this info to a text file for example.

    // Your code here... 
}

【讨论】:

    【解决方案3】:

    我认为这些帖子可能会对您有所帮助:

    1) How to view LINQ Generated SQL statements?

    2)How do I view the SQL generated by the Entity Framework?

    几个例子(来自上面):

    var sql = ((System.Data.Objects.ObjectQuery)objs).ToTraceString();
    var sql = objs.ToString();
    

    .ToTraceString() 的文档可以在这里找到:

    MSDN trace string documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多