Подстановочные знаки Entity Framework & Linq
Можно ли построить правильный запрос 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