Как отобразить оператор SQL запроса Linq-To-SQL?

1

Я пытаюсь получить самое раннее значение DateTime, которое имеет определенную дату. Экземпляр Holder уже был извлечен из контекста данных (без предварительной выборки), теперь мне нужно выполнить поиск через объект EntitySet (который не был выбран).

Я делаю это в цикле foreach для каждого держателя, поэтому для получения требуемых значений требуется много времени. Индексирование таблицы не помогло, поэтому я хочу увидеть инструкцию SQL для оптимизации базы данных.

Это код, который необходимо преобразовать в SQL:

DateTime? entryDateTime = (from io in Holder.IOs
                           where  io.IOStatus == "Entry" &&
                                  io.IODateTime.HasValue &&
                                  io.IODateTime.Value.Date == date.Date
                                  select io.IODateTime).Min();

Я не могу использовать LinqPad, потому что оператор linq напрямую не задает DataContext, а IO EntitySet.

Кроме того, если у кого-то есть идея о том, как переписать инструкцию linq, чтобы ускорить извлечение, сообщите мне. Я не хочу использовать LoadOptions, так как это задержит процесс запуска приложения.

  • 0
    цикл foreach для каждого держателя? Сколько держателей? Это будет загружать IO один за другим, поэтому для каждого держателя вы получите отдельный запрос
  • 0
    stackoverflow.com/questions/13644078/...
Теги:
sql-server
linq
performance
linq-to-sql

2 ответа

2

Возьмите запрос, остановите его в отладчике. Вы должны увидеть это с помощью мыши над объектом запроса.

Я думаю, ваша проблема - это Min. Вы получаете в SQL то, что у вас есть в LINQ, и это не то, что я буду делать в SQL.

Я бы выполнил заказ, и Top 1 - который переводится в First() в LINQ.

  • 0
    На какой объект запроса вы ссылаетесь? Я попробую ваше предложение.
  • 0
    Тот, который вы можете создать. Без Min () это IQUeryable, который вы получите назад;) Поместите это в переменную.
Показать ещё 2 комментария
0

У вас есть несколько вариантов. Используйте профилировщик в своей базе данных. http://msdn.microsoft.com/en-us/library/ms181091.aspx или Где я могу получить старую бесплатную версию SQL Profiler Anjlab?

Или кодирование: взломайте SQL-журнал LINQ 2: http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers

Ещё вопросы

Сообщество Overcoder
Наверх
Меню