Kann ich CAST in einer LINQ to Entities-Abfrage verwenden?

8

Ich habe eine LINQ to Entities-Abfrage

%Vor%

Kann ich für EF angeben, dass ein cast auf den Listenpreis angewendet werden soll, bevor er abgefragt und materialisiert wird 1 ? Gibt es etwas wie EntityFunctions.Cast vielleicht? Oder kann ich die ESQL cast Funktion verwenden?

Ich möchte, dass der LINQ eine SQL-Abfrage in diesen Zeilen generiert

%Vor%

1 Mein Ziel ist es, eine Menge Präzision loszuwerden / die Abfrage zu skalieren. Da es Dezimalsubtraktion und Division gibt, ist das Ergebnis der Mathematik eine Dezimalzahl (38, 26)! Das ist weit mehr als .NET und mehr als ich brauche.

    
just.another.programmer 03.12.2015, 09:37
quelle

1 Antwort

2

Mit EF können Sie CLR-Funktionen mithilfe von DbFunction Attribut. Leider sieht es so aus, als wären die eingebauten cast und convert keine Funktionen und es sieht nicht so aus, als könnten Sie ihnen zuordnen.

Stattdessen können Sie eine UDF erstellen, die die Umwandlung durchführt und sie in DbModel abbildet. Die Mapping-API ist kompliziert, daher würde ich die Code First Functions -Bibliothek verwenden, um das für Sie zu tun. (Wenn Sie zuerst die Datenbank oder zuerst das Modell verwenden, können Sie die Zuordnung manuell in Ihrer SSDL und CSDL 1 vornehmen). Es gibt auch keine Möglichkeit, dynamisches Casting in einer UDF auszuführen. Daher müssen Sie für jede gewünschte Besetzung separate Funktionen auswählen. Hier ist ein Beispiel für ein cast(field as decimal(10,4) .

%Vor% %Vor%

1 Siehe dieses Blog posten oder diesen MSDN Artikel für weitere Details.

    
just.another.programmer 03.12.2015, 17:42
quelle