Как я могу посмотреть на запрос LINQ - PullRequest
0 голосов
/ 13 октября 2011

Как я могу посмотреть на сгенерированный запрос sql LINQ? Я попытался LINQPad, но, как я понял, я должен написать операторы LINQ в LINQPad.

Есть ли способы без SQL Profiler?

Я использую это здесь:

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

Ответы [ 3 ]

4 голосов
/ 13 октября 2011

Если вы используете Linq To Sql , вы можете использовать StringWriter, чтобы получить Sql, сгенерированный Linq To Sql. Вот пример, который устанавливает DataContext Log и выполняет простой запрос, чтобы наконец показать в 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 голос
/ 13 октября 2011

Hibernating Rhinos также имеет инструмент, который сделает это за вас (а затем и некоторые: http://l2sprof.com/ Также есть версия для Entity Framework и NHibernate.

0 голосов
/ 21 октября 2011

Так же, как примечание, пользовательские перечислители, такие как вызовы IEnumerable Method (), позволяют вам фактически вызвать метод «GetEnumerator ()» и вернуть его. Я использовал такие конструкции (используя ваш пример) как «GetAllCategories (). GetEnumerator ()» и использую его.

Возможно, вы можете использовать метод расширения AsQueryable () в LINQPad, чтобы увидеть что-то более существенное.

...