C# - LINQ to Entities nicht erkennt die Methode 'Boolean'
Habe ich die folgende linq-Ausdruck in die lambda-syntax:
var myValue = 6;
var from = 2;
var to = 8;
var res = MyList.Where(m => m.person.Id == person.Id
&& IsBetween(myValue, from, to))
.Select(x => new Person { blah blah blah })
.ToList());
IsBetween ist einfach generische Hilfsmethode, um zu sehen, ob ich etwas dazwischen:
public bool IsBetween<T>(T element, T start, T end)
{
return Comparer<T>.Default.Compare(element, start) >= 0
&& Comparer<T>.Default.Compare(element, end) <= 0;
}
Nun bekomme ich diese Fehlermeldung, und ich weiß nicht, hot, diese zu umgehen:
LINQ to Entities erkennt nicht die Methode " Boolean IsBetween[Decimal](System.Dezimal-System.Dezimal-System.Decimal)' - Methode, und diese Methode kann nicht übersetzt werden, in einen laden zu Ausdruck.
- Wie wäre es nützlich, eh, gegeben, dass
myValue
,from
undto
sind alle hard-coded, und die nicht Teil der Entität? Bitte geben Sie ein realistischeres Beispiel. - mögliche Duplikate von alle diese.
- Diese Werte sind nur hardcoded für das Beispiel. Die Werte, die als Argumente übergeben wurden, auf meine Signatur der Methode.
- Es ist wirklich interessant...vor dem schreiben meiner Frage, ich war auf der Suche nach ähnliche Fragen. Nun ich kann sehr falsch, aber die anderen Fragen wurden gebaut-in aufrufen wie tostring (), etc. Ich Frage mich, ob eine benutzerdefinierte Methode, wie IsBetween war das anders, weil es ist eine Sonderanfertigung von mir.
- möglich, Duplikat der LINQ to Entities nicht erkennt die Methode 'System.String ToString ()' - Methode, und diese Methode kann nicht übersetzt werden in einen Speicher-Ausdruck
- Werfen Sie einen Blick auf das Konzept als auch stackoverflow.com/questions/47342632/...
- Related posts - LINQ to Entities erkennt nicht die Methode & Entity-Framework-Spezifikation Muster-Implementierung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht an beliebige Methoden innerhalb einer LINQ to Entities-Abfrage, die Abfrage wird ausgeführt, innerhalb des SQL-Datenbank-engine. Sie können nur Methoden aufrufen, die das framework übersetzen kann in eine äquivalente SQL.
Wenn Sie aufrufen müssen, eine willkürliche Methode der query-operator ruft die Methode aufrufen, müssen vorangestellt werden ein
AsEnumerable()
Betreiber, so dass der Aufruf geschieht client-Seite. Sich bewusst sein, dass dies zu tun, werden alle Ergebnisse auf der linken Seite derAsEnumerable()
werden möglicherweise in den Speicher geladen und verarbeitet.In Fällen, In denen die Methode, die Sie anrufen kurz genug ist, würde ich einfach inline die Logik. In Ihrem Fall, würden Sie auch brauchen, um die drop
Comparer
Anrufe, undIsBetween(myValue, from, to)
einfach werden würdemyValue >= from && myValue <= to
.AsEnumerable
ist die Lösung, die wir gefunden in viele andere Referenzen, und es ist eine kurze, aber nicht effiziente Lösung, wenn alle Daten vom server gezogen, um den client. Ich würde gerne sehen, eine Lösung, die mit Expression-Baum hier.<
,>
usw.).Zusätzlich zu dieser, wenn Sie wollen, übergeben Sie die Werte an IsBetween Methode von MyList.
Nehmen Sie eine wrapper-Klasse (hier Person) enthält die gleichen Eigenschaften werden an die Methode übergeben.
und etwas wie das hier tun: