Единственное место, где я обнаружил, что используется сопоставление, это условие Entity SQL ORDER BY .
Вы можете использовать SqlQuery , как показано здесь для использования строки SQL (с параметрами, конечно), которая использует предложение COLLATE:
var query = "select Name from Customers " +
" where Name COLLATE Turkish_CI_AI like @name";
var results = myContext.Customers
.SqlQuery(query,new SqlParameter("@name","%ozgur%"))
.ToList();
Я бы посоветовал быть осторожным.LIKE '%...%'
не может воспользоваться никакими индексами, которые покрывают поле name
, и ему придется искать всю таблицу.Даже Name = @name COLLATE ...
может не использовать индексы, параметры сортировки которых не совпадают с индексом, с которым был построен индекс.
Вам следует рассмотреть возможность использования полнотекстового поиска индексов и выполнять полнотекстовые поисковые запросы для конкретных слов, например:
SELECT Name from Customers WHERE CONTAINS(Name ,@thatName)
Обновление
Другой вариант - использовать перехватчик для изменения SQL, сгенерированного предложением, как показано в этом SO вопросе .Этот перехватчик использует регулярное выражение для замены LIKE
на CONTAINS
.Более простое выражение можно использовать для вставки предложения COLLATE
до LIKE
Код не является тривиальным, но, по крайней мере, это вариант.