У меня была проблема с поиском акцентированных слов, и я решил ее на сервере sql, заключив в гласные символы [], чтобы найти записи с ударением и без него.Например, WHERE Name LIKE '% [aa] ci [oo] n%', это хорошо работает на сервере SQL, но при генерации запроса с EF с использованием оператора Contains это создает очень странную запись SQL, и в настоящий моментпри выполнении запроса кажется, что сервер изменяет концепцию поиска, добавляя префикс символов "~"
. Я пытался использовать оператор Contains (concept), оператор Contains генерирует LIKE в sql, но изменяет строкукогда он включает символы [], в том числе между этим символом "~"
input:
string concept = "[aá] cc [ií] [oó] n" // ->который работает в запросе к серверу sql
EF Query:
using (Entities ctx = new Entities())
{
ctx.Database.Log = Console.Write;
var result = ctx.Product.Where(w =w.Name.Contains(concept)).ToList();
return result;
}
Сгенерированный sql:
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Name] AS [Name],
[Extent1].[Description] AS [Description],
[Extent1].[Price] AS [Price]
FROM [dbo].[Product] AS [Extent1]
WHERE [Extent1].[Name] LIKE @p__linq__0 ESCAPE '~'
- p__linq__0: '% ~ [aá] cc ~ [ií] ~ [oó] n% '(Type = AnsiString, Size = 8000)
"~ [aá] cc ~ [ií] ~ [oó] n" отличается от "[aá] cc[ií] [oó] n "из EF в EF вводом является строка, а при выполнении sql вводом является AnsiString и задаются странные символы