如何得到Linq to Sql 动态生成的sql文等信息。
如题:我想在代码中得到linq表达式生成的Sql文,并把它显示到winform的界面上。于是我用了如下方法[MyName("筛选出UnitPrice 大于10 或已停产的产品")]
public IQueryable LearnSample1_4()
{
var q = from p in dbContext.Products
where p.UnitPrice > 10 || p.Discontinued
select p;
return q;
}
用反射来执行这个方法,因为我有很多的这种方法,都定义生返回IQueryable,以便在datagridview上能绑定显示出结果。如下:
//myDB是这个MyNorwindContext myDB =new MyNorwindContext(Console.Out);
//上面那个方法在MyNorwindContext这个类里面
MethodInfo mInfo = myDB.GetType().GetMethod(this.cmbMethod.Text);
IQueryable query = (IQueryable)mInfo.Invoke(myDB, null);
this.dataGridView1.DataSource = query;
//显示linq表达式
this.rtbx_LinqExpress.Text = query.Expression.ToString();
//显示SQL文
this.rtbx_SQL.Text = query.ToString();
上面这样做没有问题。现在我再练习添加下面的方法是就行不通了。如下:
public IQueryable LearnSample1_6()
{
var q = dbContext.Shippers.First();
return q;//???问题:q不是IQueryable,没法返回
}
强行改成这样
public IQueryable LearnSample1_6()
{
var q = dbContext.Shippers.First();
List<Shippers> lstData = new List<Shippers>();
lstData.Add(q);
return lstData.AsQueryable();//编译倒是过了,也统一了IQueryable 接口,但是却得不到sql文了
}
也就是:
this.rtbx_LinqExpress.Text = query.Expression.ToString();
//显示SQL文
this.rtbx_SQL.Text = query.ToString();
这两句得不到要得东西了。不知我说的明白不,我现在想问的是:当类似于这种var q = dbContext.Shippers.First();
的时候,该如何得到他生成的SQL文。各位有没有好的方法呀。 --------------------编程问答-------------------- 比较好奇,
坐等有研究的高手解答 --------------------编程问答-------------------- 使用查询分析器,可以看到生成的语句 --------------------编程问答-------------------- foren_whb
你研究下吧,我看你都两颗红星了,你是高手,帮我帮我帮我!!!! --------------------编程问答--------------------
扎看呀,我想知道。 --------------------编程问答-------------------- 没必要搞的那么复杂
查看SQL语句的方法有很多
http://www.yaosansi.com/post/1380.html --------------------编程问答--------------------
看过了,我知道用context的log可以指定输出,但是我就是想看到每一段linq语句,在界面上马上显示他的sql句。也就是类似于LinqPad的那个查看sql功能,一段linq句 对 一段sql句,在界面上显示出来。直观。 --------------------编程问答--------------------
每次操作的时候,将操作信息写入Log。之后查看Log即可。 --------------------编程问答--------------------
现在就是操作的时候得不到sql信息,要是能得到,我就显示到界面上了。我估计这个问题牵涉到linq翻译到sql的内部机制问题,可惜我理解的不够深入,所以获取不了,很想知道linqpad是如何实现的。
补充:.NET技术 , LINQ