当前位置:编程学习 > C#/ASP.NET >>

如何得到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
你研究下吧,我看你都两颗红星了,你是高手,帮我帮我帮我!!!! --------------------编程问答--------------------
引用 2 楼 xuexiaodong2009 的回复:
使用查询分析器,可以看到生成的语句

扎看呀,我想知道。 --------------------编程问答-------------------- 没必要搞的那么复杂
查看SQL语句的方法有很多
http://www.yaosansi.com/post/1380.html --------------------编程问答--------------------
引用 5 楼 q107770540 的回复:
没必要搞的那么复杂
查看SQL语句的方法有很多
http://www.yaosansi.com/post/1380.html

看过了,我知道用context的log可以指定输出,但是我就是想看到每一段linq语句,在界面上马上显示他的sql句。也就是类似于LinqPad的那个查看sql功能,一段linq句 对 一段sql句,在界面上显示出来。直观。 --------------------编程问答--------------------
引用楼主 xiashengwang 的回复:
如题:我想在代码中得到linq表达式生成的Sql文,并把它显示到winform的界面上。于是我用了如下方法
        [MyName("筛选出UnitPrice 大于10 或已停产的产品")]
        public IQueryable LearnSample1_4()
        {
            var q = from p in dbContext.Pro……

每次操作的时候,将操作信息写入Log。之后查看Log即可。 --------------------编程问答--------------------
引用 7 楼 kingdom_0 的回复:
引用楼主 xiashengwang 的回复:
如题:我想在代码中得到linq表达式生成的Sql文,并把它显示到winform的界面上。于是我用了如下方法
[MyName("筛选出UnitPrice 大于10 或已停产的产品")]
public IQueryable LearnSample1_4()
{
var q = from p in dbContext.Pro……

每次操作的时……


现在就是操作的时候得不到sql信息,要是能得到,我就显示到界面上了。我估计这个问题牵涉到linq翻译到sql的内部机制问题,可惜我理解的不够深入,所以获取不了,很想知道linqpad是如何实现的。
补充:.NET技术 ,  LINQ
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,