【发布时间】:2010-10-06 17:00:57
【问题描述】:
我正在使用 LinqDataSource 来填充网格。但是现在我需要 LinqDataSource 生成的 SQL 查询来传递方法(不,我不能修改方法以不需要 SQL 查询)。
有没有办法从实例化和配置的 LinqDataSource 中获取生成的 SQL 查询?
【问题讨论】:
标签: sql linq .net-3.5 linqdatasource
我正在使用 LinqDataSource 来填充网格。但是现在我需要 LinqDataSource 生成的 SQL 查询来传递方法(不,我不能修改方法以不需要 SQL 查询)。
有没有办法从实例化和配置的 LinqDataSource 中获取生成的 SQL 查询?
【问题讨论】:
标签: sql linq .net-3.5 linqdatasource
Sql 只会在运行时由 Linq to Sql 基础架构生成。
我认为有一些工具可以在调试器中查看生成的 Sql,但是如果您不打算使用 linq 动态生成 Sql,您不应该寻找一个简单的 Sql 设计器吗?
我在Scottgu's blog 上找到了一个 Linq To Sql 调试可视化工具。
【讨论】:
您可以在运行应用程序时运行 SQL Profiler,这应该会提供给您。
【讨论】:
查看LinqPad 进行调试并了解其工作原理。但如果你想在运行时使用它,我认为你不走运。
【讨论】:
希望这会有所帮助。
使用下面的函数将返回一个 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;
}
【讨论】: