我正在使用 LinqDataSource 来填充网格。但是现在我需要 LinqDataSource 生成的 SQL 查询来传递方法(不,我不能修改方法以不需要 SQL 查询)。
有没有办法从实例化和配置的 LinqDataSource 中获取生成的 SQL 查询?
我正在使用 LinqDataSource 来填充网格。但是现在我需要 LinqDataSource 生成的 SQL 查询来传递方法(不,我不能修改方法以不需要 SQL 查询)。
有没有办法从实例化和配置的 LinqDataSource 中获取生成的 SQL 查询?
希望这可以帮助。
使用下面的函数将返回一个 SqlQueryText,您可以从该对象重建查询。
要获取传递的参数,您可以使用 .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;
}
您可以在运行应用程序时运行 SQL Profiler,这应该会交给您。
查看LinqPad进行调试并了解它是如何工作的。但是,如果您想在运行时使用它,我认为您不走运。
Sql 只会在运行时由 Linq to Sql 基础结构生成。
我认为有一些工具可以在调试器中查看生成的 Sql,但是如果您不打算使用 linq 动态生成 Sql,您不应该寻找一个简单的 Sql 设计器吗?
我在Scottgu 的博客上找到了一个 Linq To Sql Debug 可视化工具。