Recibo el siguiente error al intentar hacer una consulta de linq:
LINQ to Entities no reconoce el método 'Boolean IsCharityMatching (System.String, System.String)', y este método no se puede traducir a una expresión de tienda.
He leído muchas preguntas anteriores en las que las personas obtienen el mismo error, y si lo entiendo correctamente es porque LINQ to Entities requiere que toda la expresión de consulta linq se traduzca a una consulta del servidor y, por lo tanto, no puede llamar a un método externo en eso. Todavía no he podido convertir mi escenario en algo que funcione, y mi cerebro está comenzando a derretirse, por lo que esperaba que alguien pudiera señalarme en la dirección correcta. Estamos usando Entity Framework y el patrón de especificación (y soy nuevo en ambos).
Aquí está el código que usa la especificación:
ISpecification<Charity> specification = new CharitySearchSpecification(charityTitle, charityReference);
charities = charitiesRepository.Find(specification).OrderBy(p => p.RegisteredName).ToList();
Aquí está la expresión linq:
public System.Linq.Expressions.Expression<Func<Charity, bool>> IsSatisfied()
{
return p => p.IsCharityMatching(this.charityName, this.charityReference);
}
Aquí está el 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;
}
Avísame si necesitas más información.
Muchas gracias,
Annelie
Find()
cuando, cómo lo usa IsSatisfied()
dentro de él.