Como permanecer seco enquanto usa o LINQ to Entities e métodos auxiliares?
Digamos que eu tenha uma maneira específica de decidir se algumas strings "coincidem", assim:
public bool stringsMatch(string searchFor, string searchIn)
{
if (string.IsNullOrEmpty(searchFor))
{
return true;
}
return searchIn != null &&
(searchIn.Trim().ToLower().StartsWith(searchFor.Trim().ToLower()) ||
searchIn.Contains(" " + searchFor));
}
Gostaria de extrair correspondências de um banco de dados usando o Linq To Entities e esse auxiliar. No entanto, quando tento isso:
IQueryable<Blah> blahs = query.Where(b => stringsMatch(searchText, b.Name);
Eu recebo "LINQ to Entities não reconhece o método ..."
Se eu reescrever o código como:
IQueryable<Blah> blahs = query.Where(b =>
string.IsNullOrEmpty(searchText) ||
(b.Name != null &&
(b.Name.Trim().ToLower().StartsWith(searchText.Trim().ToLower()) ||
b.Name.Contains(" " + searchText)));
Qual é logicamente equivalente, então as coisas funcionam bem. O problema é que o código não é tão legível e eu preciso reescrevê-lo para cada entidade diferente que eu quero corresponde
Tanto quanto eu posso dizer a partir de perguntas comoest, o que eu quero fazer é impossível no momento, mas espero que esteja perdendo alguma coisa, estou?