LINQ to Entities erkennt nicht die Methode
Bin ich immer die folgende Fehlermeldung, wenn Sie versuchen zu tun, eine linq-Abfrage:
LINQ to Entities erkennt nicht die Methode " Boolean
IsCharityMatching(System.String, System.String)' - Methode, und diese
Methode kann nicht übersetzt werden, in einen laden zu Ausdruck.
Habe ich gelesen, viele der vorherigen Fragen, wo die Leute die gleichen Fehler, und wenn verstehe ich das richtig es ist, weil LINQ to Entities erfordert die ganze linq-Abfrage-Ausdruck übersetzt werden, um eine server-Abfrage, und daher können Sie nicht anrufen, ein außerhalb der Methode. Ich habe nicht in der Lage zu konvertieren mein Szenario in etwas, das funktioniert noch nicht, und mein Gehirn beginnt zu Schmelzen, so war ich der Hoffnung, jemand könnte mich in die richtige Richtung. Wir sind mit Entity Framework und die Spezifikation Muster (und ich bin neu auf beide).
Hier ist der code, verwendet die Spezifikation:
ISpecification<Charity> specification = new CharitySearchSpecification(charityTitle, charityReference);
charities = charitiesRepository.Find(specification).OrderBy(p => p.RegisteredName).ToList();
Hier ist die 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.
Vielen Dank,
Annelie
Überprüfen Sie diese heraus, so gut, danke!
Es wäre schön zu sehen, wie Sie mit
Find()
wenn wie verwenden Sie IsSatisfied()
im inneren.Related posts - LINQ to Entities nicht erkennt die Methode 'System.String ToString ()' - Methode, und diese Methode kann nicht übersetzt werden in einen Speicher-Ausdruck & Entity-Framework-Spezifikation Muster-Implementierung
InformationsquelleAutor annelie | 2011-08-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Sie herausgefunden haben, Entity Framework kann nicht mit Ihrem C# - code als Teil der Abfrage. Sie werden in der Lage, konvertieren Sie Abfrage in eine SQL-Anweisung an. Damit das funktioniert, müssen Sie ändern Sie die Abfrage-Ausdrucks in einen Ausdruck, Entity Framework verarbeiten kann.
wenn Sie Zweifel haben suchen Sie es auf: stackoverflow.com/questions/2352764/...
Rückkehr einer konstruierten
Expression<Func<T,type>>
ist ein sehr netter Ansatz, um dieses.Wie würden Sie diese in einem LINQ-Ausdruck? Ich möchte so etwas wie ein re-usable Where-Klausel, aber bin kämpfen mit der Umsetzung.
EDIT: nevermind, es wäre :
context.Where(IsSatisfied())
InformationsquelleAutor StriplingWarrior
Ich habe den gleichen Fehler in diesem code:
das war genau der Fehler:
Ich auf diese Weise gelöst:
Habe ich ein .ToList() vor meinem Tisch entkoppeln Sie die Entität, und linq-code, und vermeiden Sie in meinem nächsten linq-Ausdruck übersetzt werden
HINWEIS: diese Lösung ist nicht optimal, weil zu vermeiden, Einheit filtern und lädt einfach alle Tabellen in den Arbeitsspeicher
InformationsquelleAutor Ing. Gerardo Sánchez
Ich hatte ein ähnliches problem auf Ihre und diese LINQ-Dokumentation half mir finden Sie den richtigen string-Funktionen zu den Einschränkungen umgehen.
InformationsquelleAutor Michael Fayad