2016-06-21 2 views
2

У меня есть LINQ, который выглядит следующим образом:Очень медленно LINQ с тем, где заявления

var something = db.Calculations 
      .Where(x => x.CalculationDate.Date == justTheDate 
      && x.CalculationID == externalObject.CalculationID 
      && x.CalculationDate >= minDate 
      && x.CalculationDate <= maxDate).GroupBy(x => 
      (int)x.CalculationDate.TimeOfDay.TotalMinutes); 

где justTheDate, minDate, maxDate (DateTime) и externalObject.CalculationID (строка) являются все переменные находятся в области видимости.

Когда я перечисляю его (используя что-то вроде something.Select(x=>x.Last()).ToList()), он занимает около 15 секунд. Существует много данных, но не близко к тому, что ожидается в производстве.

В любом случае, чтобы сделать запрос более быстрым?

+0

Говоря об EF, LINQ не проблема - это просто синтаксис перечисления. Проблема заключается в базе данных. Сколько у вас записей? Рассмотрите возможность применения индексов к таблице. –

+3

Запустите '.ToString()' на нем, чтобы просмотреть запрос, который он генерирует. Возможно, вы сможете его индексировать. –

+0

Звучит как проблема индекса в базе данных. – prospector

ответ

4

Вы можете использовать этот код, чтобы получить сгенерированный запрос SQL:

var objectQuery = something as System.Data.Objects.ObjectQuery; 
string strQuery = objectQuery.ToTraceString(); 

после доставай запроса вы можете выполнить его на базе данных напрямую. Если он медленный снова, вы должны создать соответствующий индекс для столбцов where where.

+0

Спасибо за это, но я забыл добавить, что это для UWP. Кажется, у меня нет System.Data.Objects.ObjectQuery – Tyress

+0

@Tyress Вам нужно добавить ссылку на сборку .NET System.Data.Entity.dll. –

Смежные вопросы