Wildcards e Linq do Entity Framework
É possível construir uma consulta Linq válida que contenha caracteres curinga?
Eu vi várias respostas para esta pergunta que sugerem o uso de:
.Where(entity => entity.Name.Contains("FooBar"))
.Where(entity => entity.Name.EndsWith("Bar"))
.Where(entity => entity.Name.StartsWith("Foo"))
OU construindo o 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));
A primeira solução não funcionaria se o caractere curinga não estivesse no início ou no final de uma string, por exemplo,searchTerm = "Foo%Bar"
.
A segunda solução, usando o RawSql, não combina comigo e parece uma saída barata. Mas isso funciona.
A terceira opção que eu ainda tenho que experimentar é criar algo que possa analisar o termo de busca e construir uma consulta válida no Linq, que é algo que o @Slauma teve que usar no link 2 abaixo. Mas isso ainda não funcionaria se o curinga não estivesse no início ou no final do termo de pesquisa.
Portanto, a pergunta: é possível construir uma consulta Linq válida que contenha caracteres curinga?
EDIT: Vale a pena mencionar que, neste caso estou usando o Oracle Data Access Components (ODAC / ODP), mas eu não acho que faz muita diferença neste caso.
links:
1Consultas "like" no Entity Framework