Подтвердить что ты не робот

DATEDIFF (в месяцах) в linq

select col1,col2,col3 from table1 
where(DATEDIFF(mm, tblAccount.[State Change Date], GETDATE()) <= 4

Я хочу преобразовать этот sql-запрос в LINQ. но я не знаю альтернативы DateDiff в LINQ. можете ли вы предложить мне?

4b9b3361

Ответ 2

Отложив в сторону ваш первоначальный вопрос на мгновение, в вашем запросе вы используете:

where(DATEDIFF(mm, tblAccount.[State Change Date], GETDATE()) <= 4

Этот запрос всегда вызывает полное сканирование таблицы, поскольку вы сравниваете результат вызова функции с константой. Было бы намного лучше, если вы сначала вычислите свою дату, а затем сравните значение столбца с вычисленным значением, что позволит SQL использовать индекс для поиска результатов вместо того, чтобы оценивать каждую запись в вашей таблице.

Похоже, вы пытаетесь получить что-либо за последние 4 месяца, поэтому в своем коде приложения попробуйте рассчитать дату, которую вы можете сравнить с первой, и передайте это значение в выражение Linq2Entities:

DateTime earliestDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(-4);
var results = from t in context.table1
              where t.col3 >= earliestDate
              select t;

Ответ 4

Я решил эту проблему другим способом: я вычислил дату из кода:

theDate = Date.Now.AddMonths(-4)

И в EF измените условие:

tblAccount.[State Change Date] < theDate