Existe uma maneira simples de escrever uma função personalizada no LINQ to Entities?
Eu estou escrevendo uma consulta de pesquisa simples para o meu aplicativo Entity Framework. Eu preciso verificar se um monte de campos são nulos, e se não, chame ToLower () neles e compare com a consulta de pesquisa. A consulta LINQ é algo como isto:
public IQueryable<Store> SearchStores(string q, IQueryable<Store> source)
{
q = q.ToLower();
return (
from s in source
where (
(s.Name != null && s.Name.ToLower().Contains(q)) ||
(s.Description != null && s.Description.ToLower().Contains(q)) ||
...
}
Há muitas linhas como essa, então fiquei tentado a escrever um método auxiliar para limpá-lo um pouco:
public static bool SafeSearch(this string s, string q)
{
return s == null ? false : s.ToLower().Contains(q);
}
Isso obviamente não funciona, já que o LINQ para entidades não entende o que é a função SafeSearch:
LINQ to Entities não reconhece o método 'Boolean SafeSearch (System.String, System.String)' método e esse método não pode ser convertido em uma expressão de armazenamento.
Existe uma maneira fácil de escrever uma função personalizada simples como essa?
Obrigado!