【问题标题】:Can I get the T-SQL query generated from a LinqDataSource?我可以获取从 LinqDataSource 生成的 T-SQL 查询吗?
【发布时间】:2010-10-06 17:00:57
【问题描述】:

我正在使用 LinqDataSource 来填充网格。但是现在我需要 LinqDataSource 生成的 SQL 查询来传递方法(不,我不能修改方法以不需要 SQL 查询)。

有没有办法从实例化和配置的 LinqDataSource 中获取生成的 SQL 查询?

【问题讨论】:

    标签: sql linq .net-3.5 linqdatasource


    【解决方案1】:

    Sql 只会在运行时由 Linq to Sql 基础架构生成。

    我认为有一些工具可以在调试器中查看生成的 Sql,但是如果您不打算使用 linq 动态生成 Sql,您不应该寻找一个简单的 Sql 设计器吗?

    我在Scottgu's blog 上找到了一个 Linq To Sql 调试可视化工具。

    【讨论】:

    • 我确实计划使用 linq 动态生成我的 SQL。只是我也需要动态生成的 SQL。是的,我正在开发的应用程序有点……乱七八糟。
    【解决方案2】:

    您可以在运行应用程序时运行 SQL Profiler,这应该会提供给您。

    【讨论】:

      【解决方案3】:

      查看LinqPad 进行调试并了解其工作原理。但如果你想在运行时使用它,我认为你不走运。

      【讨论】:

        【解决方案4】:

        希望这会有所帮助。

        使用下面的函数将返回一个 SqlQueryText 您可以从该对象重建查询。

        • 要获取可以使用的 sql 文本,请使用 .Text 属性
        • 获得通过 您可以使用 .Params 属性的参数

              public static SqlQueryText GetFullQueryInfo(DataContext dataContext, IQueryable query)
              {
                  DbCommand dbCommand = dataContext.GetCommand(query);
          
                  var result = new SqlQueryText();
          
                  result.Text = dbCommand.CommandText;
                  int nParams = dbCommand.Parameters.Count;
                  result.Params = new ParameterText[nParams];
                  for (int j = 0; j < nParams; j++)
                  {
                      var param = new ParameterText();
                      DbParameter pInfo = dbCommand.Parameters[j];
                      param.Name = pInfo.ParameterName;
                      param.SqlType = pInfo.DbType.ToString();
                      object paramValue = pInfo.Value;
                      if (paramValue == null)
                      {
                          param.Value = null;
                      }
                      else
                      {
                          param.Value = pInfo.Value.ToString();
                      }
                      result.Params[j] = param;
                  }
                  return result;
              }
          

          这是一个例子

          var results = db.Medias.Where(somepredicatehere); ClassThatHasThisMethod.GetFullQueryInfo(yourdatacontexthere, results);

        编辑:

        抱歉忘记包含 SqlQueryText 数据结构

        public struct SqlQueryText
        {
            public ParameterText[] Params;
            public string Text;
        }
        
        public struct ParameterText
        {
            public string Name;
            public string SqlType;
            public string Value;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-10
          • 1970-01-01
          • 2014-02-15
          • 2021-12-16
          • 1970-01-01
          相关资源
          最近更新 更多