Я пытаюсь получить самое раннее значение 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, так как это задержит процесс запуска приложения.
Возьмите запрос, остановите его в отладчике. Вы должны увидеть это с помощью мыши над объектом запроса.
Я думаю, ваша проблема - это Min. Вы получаете в SQL то, что у вас есть в LINQ, и это не то, что я буду делать в SQL.
Я бы выполнил заказ, и Top 1 - который переводится в First() в LINQ.
У вас есть несколько вариантов. Используйте профилировщик в своей базе данных. 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