如何得到Linq to Sql 动态生成的sql文等信息。

技术小牛 2011-05-24 09:20:27
如题:我想在代码中得到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文。各位有没有好的方法呀。
...全文
1959 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingdom_0 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 xiashengwang 的回复:]
如题:我想在代码中得到linq表达式生成的Sql文,并把它显示到winform的界面上。于是我用了如下方法
[MyName("筛选出UnitPrice 大于10 或已停产的产品")]
public IQueryable LearnSample1_4()
{
var q = from p in dbContext.Pro……
[/Quote]
每次操作的时候,将操作信息写入Log。之后查看Log即可。
技术小牛 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 q107770540 的回复:]
没必要搞的那么复杂
查看SQL语句的方法有很多
http://www.yaosansi.com/post/1380.html
[/Quote]
看过了,我知道用context的log可以指定输出,但是我就是想看到每一段linq语句,在界面上马上显示他的sql句。也就是类似于LinqPad的那个查看sql功能,一段linq句 对 一段sql句,在界面上显示出来。直观。
q107770540 2011-05-24
  • 打赏
  • 举报
回复
没必要搞的那么复杂
查看SQL语句的方法有很多
http://www.yaosansi.com/post/1380.html
技术小牛 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xuexiaodong2009 的回复:]
使用查询分析器,可以看到生成的语句
[/Quote]
扎看呀,我想知道。
技术小牛 2011-05-24
  • 打赏
  • 举报
回复
foren_whb
你研究下吧,我看你都两颗红星了,你是高手,帮我帮我帮我!!!!
xuexiaodong2009 2011-05-24
  • 打赏
  • 举报
回复
使用查询分析器,可以看到生成的语句
丰云 2011-05-24
  • 打赏
  • 举报
回复
比较好奇,
坐等有研究的高手解答
技术小牛 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 kingdom_0 的回复:]
引用楼主 xiashengwang 的回复:
如题:我想在代码中得到linq表达式生成的Sql文,并把它显示到winform的界面上。于是我用了如下方法
[MyName("筛选出UnitPrice 大于10 或已停产的产品")]
public IQueryable LearnSample1_4()
{
var q = from p in dbContext.Pro……

每次操作的时……
[/Quote]

现在就是操作的时候得不到sql信息,要是能得到,我就显示到界面上了。我估计这个问题牵涉到linq翻译到sql的内部机制问题,可惜我理解的不够深入,所以获取不了,很想知道linqpad是如何实现的。

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧