J'obtiens l'erreur suivante lorsque j'essaie de faire une requête linq :
LINQ to Entities ne reconnaît pas la méthode ' IsCharityMatching(System.String, System.String)', et cette méthode ne peut pas être tracée. ne peut pas être traduite en une expression de magasin.
J'ai lu beaucoup de questions précédentes où les gens obtiennent la même erreur, et si je comprends bien, c'est parce que LINQ to Entities exige que toute l'expression de la requête linq soit traduite en une requête serveur, et donc on ne peut pas appeler une méthode extérieure dans cette expression. Je n'ai pas encore réussi à convertir mon scénario en quelque chose qui fonctionne, et mon cerveau commence à fondre, alors j'espérais que quelqu'un pourrait m'orienter dans la bonne direction. Nous utilisons Entity Framework et le modèle de spécification (et je suis nouveau dans les deux cas).
Voici le code qui utilise la spécification :
ISpecification<Charity> specification = new CharitySearchSpecification(charityTitle, charityReference);
charities = charitiesRepository.Find(specification).OrderBy(p => p.RegisteredName).ToList();
Voici l'expression linq :
public System.Linq.Expressions.Expression<Func<Charity, bool>> IsSatisfied()
{
return p => p.IsCharityMatching(this.charityName, this.charityReference);
}
Voici la méthode 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;
}
N'hésitez pas à me contacter si vous avez besoin de plus d'informations.
Merci beaucoup,
Annelie