Можно ли создать действительный запрос Linq, содержащий подстановочные знаки?
Я видел различные ответы на этот вопрос, в которых предлагается использовать:
.Where(entity => entity.Name.Contains("FooBar"))
.Where(entity => entity.Name.EndsWith("Bar"))
.Where(entity => entity.Name.StartsWith("Foo"))
ИЛИ создание RawSql:
var commandText =
@"SELECT field
FROM table
WHERE field LIKE @search";
var query = new ObjectQuery<Profile>(commandText, context);
query.Parameters.Add(new ObjectParameter("search", wildcardSearch));
Первое решение не сработало бы, если бы подстановочный знак не был в начале или конце строки, например searchTerm = "Foo%Bar"
.
Второе решение, использующее RawSql, меня не устраивает и кажется дешевым выходом. Но это действительно работает.
Третий вариант, который мне еще предстоит опробовать, - это создать что-то, что может анализировать поисковый запрос и создавать действительный запрос Linq, что @Slauma предпринял в ссылке 2 ниже. Но это все равно не сработало бы, если бы подстановочный знак не был в начале или в конце поискового запроса.
Итак, вопрос: можно ли создать действительный запрос Linq, содержащий символы подстановки?
РЕДАКТИРОВАТЬ: Стоит упомянуть, что в этом случае я использую компоненты доступа к данным Oracle (ODAC / ODP), но я не думаю, что в этом случае это имеет большое значение.
ссылки:
1. похожие запросы в Entity Framework
2. точный поиск и поиск с подстановочными знаками в зависимости от поискового запроса