Beim Versuch, eine Linq-Abfrage durchzuführen, wird folgende Fehlermeldung angezeigt:
LINQ to Entities erkennt die Methode 'Boolean IsCharityMatching (System.String, System.String)' nicht und diese Methode kann nicht in einen Speicherausdruck übersetzt werden.
Ich habe viele frühere Fragen gelesen, bei denen derselbe Fehler auftritt. Wenn ich das richtig verstehe, liegt es daran, dass für LINQ to Entities der gesamte Linq-Abfrageausdruck in eine Serverabfrage übersetzt werden muss und Sie daher keine externe Methode aufrufen können drin. Ich konnte mein Szenario noch nicht in etwas umwandeln, das funktioniert, und mein Gehirn beginnt zu schmelzen. Ich hatte gehofft, jemand könnte mich in die richtige Richtung weisen. Wir verwenden Entity Framework und das Spezifikationsmuster (und ich bin neu in beiden).
Hier ist der Code, der die Spezifikation verwendet:
ISpecification<Charity> specification = new CharitySearchSpecification(charityTitle, charityReference);
charities = charitiesRepository.Find(specification).OrderBy(p => p.RegisteredName).ToList();
Hier ist der linq-Ausdruck:
public System.Linq.Expressions.Expression<Func<Charity, bool>> IsSatisfied()
{
return p => p.IsCharityMatching(this.charityName, this.charityReference);
}
Hier ist die IsCharityMatching-Methode:
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;
}
Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.
Danke vielmals,
Annelie
Find()
wann Sie IsSatisfied()
es verwenden.