Estou recebendo o seguinte erro ao tentar fazer uma consulta linq:
LINQ to Entities não reconhece o método 'Boolean IsCharityMatching (System.String, System.String)' e esse método não pode ser convertido em uma expressão de armazenamento.
Eu li muitas perguntas anteriores em que as pessoas obtêm o mesmo erro e, se entendi corretamente, é porque o LINQ to Entities requer que toda a expressão de consulta do linq seja traduzida para uma consulta de servidor e, portanto, você não pode chamar um método externo iniciar. Ainda não consegui converter meu cenário em algo que funcione, e meu cérebro está começando a derreter, então esperava que alguém pudesse me apontar a direção certa. Estamos usando o Entity Framework e o padrão de especificação (e sou novo em ambos).
Este é o código que usa a especificação:
ISpecification<Charity> specification = new CharitySearchSpecification(charityTitle, charityReference);
charities = charitiesRepository.Find(specification).OrderBy(p => p.RegisteredName).ToList();
Aqui está a expressão linq:
public System.Linq.Expressions.Expression<Func<Charity, bool>> IsSatisfied()
{
return p => p.IsCharityMatching(this.charityName, this.charityReference);
}
Este é o método IsCharityMatching:
public bool IsCharityMatching(string name, string referenceNumber)
{
bool exists = true;
if (!String.IsNullOrEmpty(name))
{
if (!this.registeredName.ToLower().Contains(name.ToLower()) &&
!this.alias.ToLower().Contains(name.ToLower()) &&
!this.charityId.ToLower().Contains(name.ToLower()))
{
exists = false;
}
}
if (!String.IsNullOrEmpty(referenceNumber))
{
if (!this.charityReference.ToLower().Contains(referenceNumber.ToLower()))
{
exists = false;
}
}
return exists;
}
Deixe-me saber se você precisar de mais informações.
Muito Obrigado,
Annelie
Find()
quando usa IsSatisfied()
dentro dele.