У меня есть что-то вроде этого
var query = repo.GetQuery(); // IQueryable
query.Where(item => item.FieldName.Contains("xxx%yyy"));
Это приводит к следующему утверждению на сервере SQL
exec sp_executesql N'SELECT
// clipped
WHERE ([Extent1].[FieldName] LIKE @p__linq__0 ESCAPE N''~'')',
N'@p__linq__0 nvarchar(4000),@p__linq__0=N'%xxx~%yyy%'
@p__linq__0=N'%xxx~%yyy%
заставляет сервер SQL искать xxx%yyy
с %
в качестве литерала (поскольку он экранирован), в то время как я хотел бы, чтобы он совпадал со строкой, такой как xxx123yyy
, xxxABCyyy
, xxxANYTHINGyyy
, xxxyyy
и т. Д. Добавление prefix %
и suffix %
хорошо, но я мог бы сделать это вручную, если это необходимо.
В приведенном выше примере я упростил и написал только одно условие, но у меня есть динамическая логика, которая строит предикат со многими из таких ключевых слов, и я хотел бы разрешить использование подстановочных знаков внутри ключевых слов. Есть ли способ сказать EF не избегать% в ключевом слове поиска?