Ich habe auf dieses Problem gestoßen:
Grundsätzlich habe ich einige komplizierte LINQ-Abfragen, also wollte ich sie in Unterabfragen zerlegen, die als Methoden implementiert werden, die IQueryables zurückgeben. Meine Hoffnung war dann diese IQueryables könnten zusammen in einer LINQ-Anweisung (wie ich ziemlich sicher bin, dass Sie in LINQ zu SQL tun können) zusammengestellt werden.
Das Problem ist, wenn Sie dies versuchen, erhalten Sie (zum Beispiel):
LINQ to Entities erkennt nicht die Methode 'System.Linq.IQueryable'1 [Thema] GetThreadsByMostReccentlyPosted (Int32) ' Methode, und diese Methode kann nicht sein übersetzt in einen Geschäftsausdruck.
Es scheint mir sehr wichtig zu sein, dass Sie, wenn Sie ein LINQ-ORM verwenden, in der Lage sein müssen, LINQ-Abfragen zu erstellen. Sonst muss jede übliche Abfragelogik kopiert & amp; eingefügt.
Wie soll ich angesichts dieser Einschränkung DRY bei LINQ zu Entitäten bleiben?
Zwei Möglichkeiten:
Für # 1:
%Vor%Ein Beispiel für Nummer 2 finden Sie in diesem Artikel: Erstellen von L2O- und L2E-Abfragen . Betrachten Sie das dort gegebene Beispiel:
%Vor%Dies könnte weniger effizient sein, oder es könnte in Ordnung sein. Es hängt davon ab, was Sie tun. Es ist normalerweise gut für Projektionen, oft nicht OK für Einschränkungen.
Aktualisieren Gerade gesehen eine noch bessere Erklärung der Option # 1 von Damien Guard.
EF kann keine Abfrage aus einem LINQ-Ausdruck erstellen, der eine Methode enthält. EF benötigt Literalwerte, um das SQL zu erstellen.
Sie müssen mit "allgemeinen" Abfragen auskommen, die eine Obermenge der Entitäten zurückgeben, die Sie für einen bestimmten Fall benötigen, und dann die Erweiterungsmethoden und LINQ verwenden, um den Rückgabewert einzugrenzen, sobald er aus der Datenbank zurückgegeben wurde.
Tags und Links entity-framework linq-to-sql linq-to-entities