Возможно ли построить допустимый запрос Linq, содержащий подстановочные знаки?Подстановочные знаки Entity Framework & 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, содержащий подстановочные знаки?
EDIT: Стоит отметить, что в этом случае я использую Oracle Data Access Components (ODAC/ODP), но я не думаю, что это имеет большое значение в этом случае.
ссылки:
1. “like” queries in Entity Framework
2. exact and wildcard searching conditional on search term
3. Using RawSql
Я знаю, что это старый вопрос, но вы можете использовать идею от ответа здесь: http://stackoverflow.com/questions/1040380/wildcard-search-for-linq/42307642#42307642 Eсть а не возможность добавления подстановочных знаков в строку, но вы можете построить запрос LIKE, который вы хотите. –