如何查看linq生成的sql

如何查看linq生成的sql

一、控制台程序中

添加:db.Log = Console.Out;

二、写入日志文件

  •  
  • 
    StreamWriter sw = new StreamWriter("F:\\\\Linqlog.txt", true);
    db.Log = sw;
    ......//Linq to Sql代码
    sw.Close();
    
    		
  • 三、利用ObjectQuery的ToTraceString查看生成的SQL语句:

  • C# 代码   复制
  • 
             public IQueryable<T_Bas_PlanInfo> GetT_Bas_PlanInfoByCondition(string industryId)
             {
                 var list = this.ObjectContext.T_Bas_EnterpriseProductionData
                     .Where(e => e.region.Equals(industryId))
                     .Select(e => e.latitude.Trim())
                     .Distinct();
    
                 var results = this.ObjectContext.T_Bas_PlanInfo
                     .Where(e => list.Any(e2 => e.plangeneral.Contains(e2)));
    
                var sql = (results as ObjectQuery<T_Bas_PlanInfo>).ToTraceString(); 
    
                 return results; 
             }
    
    		
  • 四、利用GetCommand方法

    dataContext.GetCommand(query).CommandText;

    五、使用LINQPad

    LINQPad支持 LINQ to SQL、LINQ to Objects、LINQ to XML等等

    六、LINQ to SQL Debug Visualizer

    ScottGu的LINQ to SQL Debug Visualizer可以在Debug过程中查看SQL语句.

    七、DebuggerWriter工具类

    可以选择将Log信息直接发送到Debug的输出窗口.

    DebuggerWriter源码

  •  
  • C# 代码   复制
  • 
    using System;
    
    using System.Diagnostics;
    
    using System.Globalization;
    
    using System.IO;
    
    using System.Text;
    
    
    
    namespace Vandermotten.Diagnostics
    
    {
    
        /**//// <summary>
    
        /// Implements a <see cref="TextWriter"/> for writing information to the debugger log.
    
        /// </summary>
    
        /// <seealso cref="Debugger.Log"/>
    
        public class DebuggerWriter : TextWriter
    
        {
    
            private bool isOpen;
    
            private static UnicodeEncoding encoding;
    
            private readonly int level;
    
            private readonly string category;
    
    
    
            /**//// <summary>
    
            /// Initializes a new instance of the <see cref="DebuggerWriter"/> class.
    
            /// </summary>
    
            public DebuggerWriter()
    
                : this(0, Debugger.DefaultCategory)
    
            {
    
            }
    
    
    
            /**//// <summary>
    
            /// Initializes a new instance of the <see cref="DebuggerWriter"/> class with the specified level and category.
    
            /// </summary>
    
            /// <param name="level">A description of the importance of the messages.</param>
    
            /// <param name="category">The category of the messages.</param>
    
            public DebuggerWriter(int level, string category)
    
                : this(level, category, CultureInfo.CurrentCulture)
    
            {
    
            }
    
    
    
            /**//// <summary>
    
            /// Initializes a new instance of the <see cref="DebuggerWriter"/> class with the specified level, category and format provider.
    
            /// </summary>
    
            /// <param name="level">A description of the importance of the messages.</param>
    
            /// <param name="category">The category of the messages.</param>
    
            /// <param name="formatProvider">An <see cref="IFormatProvider"/> object that controls formatting.</param>
    
            public DebuggerWriter(int level, string category, IFormatProvider formatProvider)
    
                : base(formatProvider)
    
            {
    
                this.level = level;
    
                this.category = category;
    
                this.isOpen = true;
    
            }
    
    
    
            protected override void Dispose(bool disposing)
    
            {
    
                isOpen = false;
    
                base.Dispose(disposing);
    
            }
    
    
    
            public override void Write(char value)
    
            {
    
                if (!isOpen)
    
                {
    
                    throw new ObjectDisposedException(null);
    
                }
    
                Debugger.Log(level, category, value.ToString());
    
            }
    
    
    
            public override void Write(string value)
    
            {
    
                if (!isOpen)
    
                {
    
                    throw new ObjectDisposedException(null);
    
                }
    
                if (value != null)
    
                {
    
                    Debugger.Log(level, category, value);
    
                }
    
            }
    
    
    
            public override void Write(char[] buffer, int index, int count)
    
            {
    
                if (!isOpen)
    
                {
    
                    throw new ObjectDisposedException(null);
    
                }
    
                if (buffer == null || index < 0 || count < 0 || buffer.Length - index < count)
    
                {
    
                    base.Write(buffer, index, count); // delegate throw exception to base class
    
                }
    
                Debugger.Log(level, category, new string(buffer, index, count));
    
            }
    
    
    
            public override Encoding Encoding
    
            {
    
                get
    
                {
    
                    if (encoding == null)
    
                    {
    
                        encoding = new UnicodeEncoding(false, false);
    
                    }
    
                    return encoding;
    
                }
    
            }
    
    
    
            public int Level
    
            {
    
                get { return level; }
    标签: