如何通过LINQ查看生成的sql查询?我试过LINQPad,但据我所知,我必须在LINQPad中编写LINQ语句。
我在这里使用它:
public IEnumerable<PeopleTalesCategory> GetAllCategories()
{
return _dataContext.PeopleTalesCategories.OrderBy(c => c.PositionInMenu).ThenBy(c => c.NameAn);
}
答案 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()”扩展方法来查看更具实质性的内容。