我怎么看查询LINQ

时间:2011-10-12 20:38:01

标签: .net linq profiler linqpad

如何通过LINQ查看生成的sql查询?我试过LINQPad,但据我所知,我必须在LINQPad中编写LINQ语句。

没有SQL Profiler的任何方法?

我在这里使用它:

public IEnumerable<PeopleTalesCategory> GetAllCategories()
{
    return _dataContext.PeopleTalesCategories.OrderBy(c => c.PositionInMenu).ThenBy(c => c.NameAn);
}

3 个答案:

答案 0 :(得分:4)

如果您使用 Linq To Sql ,您可以使用StringWriter来获取Linq To Sql生成的Sql。下面是一个设置DataContext日志并执行简单查询以最终显示在sqlLinqToSql.Text SQL中的示例。

DataClasses1DataContext db = new DataClasses1DataContext();
StringWriter sw = new StringWriter();
db.Log = sw;

this.gridLinqToSql.DataSource = db.Customers.Where(c => c.CustomerID.StartsWith("A"));
this.gridLinqToSql.DataBind(); //Here is when the Linq query will be executed.

sqlLinqToSql.Text = sw.GetStringBuilder().ToString();

如果您使用 Linq To Entity ,则会有所不同。您需要从ObjectQuery调用ToTraceString()

var cust = (from c in context.Customers select c);
string sql = ((ObjectQuery)cust).ToTraceString();

答案 1 :(得分:1)

Hibernating Rhinos也有一个工具可以为你做这个(然后一些:http://l2sprof.com/还有Entity Framework和NHibernate的版本。

答案 2 :(得分:0)

正如旁注,自定义枚举器(如IEnumerable Method()调用)允许您实际调用“GetEnumerator()”方法并将其返回。我使用过这样的结构(使用你的例子)作为“GetAllCategories()。GetEnumerator()”并使用它。

也许您可以在LINQPad中使用“AsQueryable()”扩展方法来查看更具实质性的内容。