EF SQL WHERE с использованием преобразования LOWER () для сравнения строк - PullRequest
1 голос
/ 28 июня 2019

Мое приложение использует Entity Framework поверх базы данных SQL Azure.

Оно имеет функцию, позволяющую пользователю искать записи на основе заданного телефонного номера.В искомой таблице много столбцов, включая 3 столбца для телефонных номеров: столбец BusinessPhone, HomePhone и CellPhone.Все эти три столбца проиндексированы.

Мой EF DbContext генерирует следующее как часть предложения WHERE:

WHERE (10 = [Extent1].[Debtor_DebtorStatus]) AND 
(((LOWER([Extent1].[BusinessPhone])) = (LOWER(N'012345678'))) 
OR ((LOWER([Extent1].[HomePhone])) = (LOWER(N'012345678'))) 
OR ((LOWER([Extent1].[CellPhone])) = (LOWER(N'012348678'))) 
)

Запрос занимает около 3 минут, чтобы вернуть ответ (дажекогда я запускаю его в SQL Management Studio).

Если я отредактирую этот оператор SQL и удалю функцию LOWER(), он будет выполнен менее чем за секунду !!!

Есть ли какие-нибудьпараметр, который можно щелкнуть, чтобы заставить EntityFramework НЕ использовать функцию LOWER() в сгенерированном операторе SQL?

Если это невозможно, могу ли я перехватить этот оператор SQL и удалить функции LOWER()в коде перед выполнением в базе данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...