So rufen Sie eine skalarwertige Funktion von LINQ zu Entitäten serverseitig auf

8

Ich habe eine skalarwertige Funktion in meiner Datenbank:

%Vor%

Ich möchte diese Funktion von einer LINQ to Entities-Abfrage aufrufen und das Ergebnis in eine Variable holen:

%Vor%

Aber wenn ich den Code ausführe, bekomme ich diesen Fehler:

  

LINQ to Entities erkennt die Methode nicht   'System.Data.Objects.ObjectResult'1 [System.String]   ExecuteFunction [Zeichenfolge] (System.String,   System.Data.Objects.ObjectParameter []) Methode, und diese Methode kann nicht   in einen Geschäftsausdruck übersetzt werden.

Weitere Informationen:

Dies ist Teil einer Abfrage, die auf dem Server ausgeführt wird.
Die Rückgabe aller Daten und die Verwendung von LINQ zu Objects ist aufgrund der Leistung keine Option.

Ich bin nicht sicher, ob ich den Rückgabetyp von ExecuteFunction korrekt habe, aber ich bin mir nicht sicher, was es sonst noch sein könnte ... Was mache ich falsch?

Bearbeiten
Mit Hilfe von Ladislav Mrnkas Antwort, hier ist die Lösung:

Erstellen Sie eine Hilfsmethode, die die SQL-Funktion verfügbar macht:

%Vor%

Der LINQ sollte jetzt lesen:

%Vor%     
mcqwerty 09.08.2011, 15:44
quelle

2 Antworten

9

Haben Sie Ihre Funktion in EDMX gemappt? Ich nehme an, Sie nicht.

Führen Sie Aktualisieren von der Datenbank Wizard im Designer und unter gespeicherten Prozeduren Wählen Sie Ihre SQL-Funktion zum Importieren und folgen dieser Artikel , um eine Hilfsmethode zu erstellen, die mit EdmFunctionAttribute gekennzeichnet ist, um die SQL-Funktion für LINQ-TO-Entities verfügbar zu machen .

Hinweis: SQL-Funktionen werden in Code-First / fluent-API nicht unterstützt. Sie müssen das Mapping mit EDMX verwenden.

ExecuteFunction wird verwendet, um in EDMX gemappte Features aufzurufen - es erwartet den Namen des zugeordneten Features (Funktion importiert gespeicherte Prozeduren). MSDN sagt, dass es auch zugeordnete Funktionen aufrufen kann, aber ich weiß nicht, wie - es ruft Funktionsimport und SQL-Funktionsimport hat keine.

    
Ladislav Mrnka 09.08.2011, 18:40
quelle
0

Nun, Sie müssen SQL ändern, um den einzelnen / skalaren Wert in eine Tabellenwertfunktion zu konvertieren, dann wird es funktionieren. Da es noch keine Unterstützung für skalare Funktionen gibt, Ссылка

  

Skalarfunktion wie sie war, was nicht funktioniert

%Vor%
  

Skalarfunktion - & gt; In Table Valued Funktion konvertiert, funktioniert es

%Vor%     
Md. Alim Ul Karim 17.08.2017 05:37
quelle