Могу ли я получить запрос T-SQL, сгенерированный из LinqDataSource? - PullRequest
3 голосов
/ 10 февраля 2009

Я использую LinqDataSource для заполнения сетки. Но теперь мне нужен SQL-запрос, который генерирует LinqDataSource, чтобы обойти методы (нет, я не могу изменить методы, чтобы не нуждался в SQL-запросе).

Есть ли способ получить сгенерированный SQL-запрос от созданного и настроенного LinqDataSource?

Ответы [ 4 ]

3 голосов
/ 10 февраля 2009

Надеюсь, это поможет.

с использованием функции ниже вернет SqlQueryText Вы можете перестроить запрос из этого объекта.

  • чтобы получить текст sql, который вы можете использовать, используйте свойство .Text
  • чтобы получить пройденный параметры, которые вы можете использовать .Params свойство

        public static SqlQueryText GetFullQueryInfo(DataContext dataContext, IQueryable query)
        {
            DbCommand dbCommand = dataContext.GetCommand(query);
    
            var result = new SqlQueryText();
    
            result.Text = dbCommand.CommandText;
            int nParams = dbCommand.Parameters.Count;
            result.Params = new ParameterText[nParams];
            for (int j = 0; j < nParams; j++)
            {
                var param = new ParameterText();
                DbParameter pInfo = dbCommand.Parameters[j];
                param.Name = pInfo.ParameterName;
                param.SqlType = pInfo.DbType.ToString();
                object paramValue = pInfo.Value;
                if (paramValue == null)
                {
                    param.Value = null;
                }
                else
                {
                    param.Value = pInfo.Value.ToString();
                }
                result.Params[j] = param;
            }
            return result;
        }
    

    вот пример

    var results = db.Medias.Where (где-то предвидеть); ClassThatHasThisMethod.GetFullQueryInfo (ваш даный текст, результаты);

EDIT:

Извините, забыл включить структуры данных SqlQueryText

public struct SqlQueryText
{
    public ParameterText[] Params;
    public string Text;
}

public struct ParameterText
{
    public string Name;
    public string SqlType;
    public string Value;
}
2 голосов
/ 10 февраля 2009

Вы можете запустить SQL Profiler во время работы вашего приложения, и это должно дать вам.

1 голос
/ 10 февраля 2009

Посмотрите на LinqPad для отладки и чтобы понять, как она работает. Но если вы хотите этого во время выполнения, я думаю, вам не повезло.

0 голосов
/ 10 февраля 2009

Sql будет генерироваться только инфраструктурой Linq to Sql во время выполнения.

Я думаю, что есть некоторые инструменты, чтобы увидеть сгенерированный Sql в отладчике, но если вы не планируете использовать linq для динамического генерирования Sql, разве вы не должны искать простой Sql-дизайнер?

Я нашел визуализатор Linq To Sql Debug в блоге Скотту .

...