ObjectContext,DataContext和DBContext 分别获取linq 的sql方法

ObjectContext

先定义一个扩展方法:

 public static string ToTraceString<T>(this IQueryable<T> t)
        {
            string sql = "";
            ObjectQuery<T> oqt = t as ObjectQuery<T>;
            if (oqt != null)
                sql = oqt.ToTraceString();
            return sql;
        }

使用方法:

  var query = db.Call.Where(a => a.CustomerId == id && a.IsActive == "Y"); //不能ToList(),必须为IQueryble<T>类型
 var sql= query.ToTraceString();

 

 

DataContext:

定义一个输出到debug窗口的类:

        public  class DebugTextWriter : System.IO.TextWriter
    {
        public override void Write(char[] buffer, int index, int count)
        {
            System.Diagnostics.Debug.Write(new String(buffer, index, count));
        }

        public override void Write(string value)
        {
            System.Diagnostics.Debug.Write(value);
        }

        public override Encoding Encoding
        {
            get { return System.Text.Encoding.Default; }
        }
    }

 

使用:

              using (var db = new NorthwindDataContext())
            {
                List<Call> calls = (from p in db.Call
                                         where p.CustomerId == "12414"
                                         orderby p.UpdateTime
                                         select p).ToList();  //必须Tolist查询,延迟加载无法获得sql语句
                db.Log=new DebugTextWriter();
           
            }

 注:DataContext也可以使用下列ToString()方法。

 

DBContext 最简单,只需要ToString()方法。

  var query = db.Call.Where(a => a.CustomerId == id && a.IsActive == "Y"); //不能ToList(),必须为IQueryble<T>类型
var sql = query.ToString();

 

 

posted @ 2014-01-08 12:45  瓜王  阅读(3219)  评论(0编辑  收藏  举报