Ricevo il seguente errore quando provo a eseguire una query su linq:
LINQ to Entities non riconosce il metodo "Boolean IsCharityMatching (System.String, System.String)" e questo metodo non può essere tradotto in un'espressione di archivio.
Ho letto molte domande precedenti in cui le persone ottengono lo stesso errore e se lo capisco correttamente è perché LINQ to Entities richiede che l'intera espressione di query linq sia tradotta in una query del server, e quindi non è possibile chiamare un metodo esterno dentro. Non sono ancora riuscito a convertire il mio scenario in qualcosa che funzioni, e il mio cervello sta iniziando a sciogliersi, quindi speravo che qualcuno potesse indicarmi la giusta direzione. Stiamo usando Entity Framework e il modello di specifica (e sono nuovo per entrambi).
Ecco il codice che utilizza la specifica:
ISpecification<Charity> specification = new CharitySearchSpecification(charityTitle, charityReference);
charities = charitiesRepository.Find(specification).OrderBy(p => p.RegisteredName).ToList();
Ecco l'espressione linq:
public System.Linq.Expressions.Expression<Func<Charity, bool>> IsSatisfied()
{
return p => p.IsCharityMatching(this.charityName, this.charityReference);
}
Ecco il metodo 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;
}
Fammi sapere se hai bisogno di ulteriori informazioni.
Grazie molto,
Annelie
Find()
quando come lo usi IsSatisfied()
al suo interno.