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();

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM