如何查看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语句:
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源码
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; }
标签: