zoukankan      html  css  js  c++  java
  • 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();
  • 相关阅读:
    在 Queue 中 poll()和 remove()有什么区别?
    jdk 8 HashMap源码解读
    java 中,没有任何方法和成员变量的接口
    ArrayList、LinkedList、Vector、Array
    StringBuilder和StringBuffer
    Collection
    jdk代理和cglib代理源代码之我见
    多 线程
    Spring的@Enable*注解的工作原理
    redis 学习
  • 原文地址:https://www.cnblogs.com/Benjamin/p/3510448.html
Copyright © 2011-2022 走看看