Bei der Verwendung von EF (bis mindestens Version 6.1.3) vorausgesetzt, Sie haben eine Klasse wie diese:
%Vor% Wenn Sie ein Feld FullName
, das die Verkettung von beiden ist ( FirstName
und LastName
), als ein Feld im Abfrageergebnis erhalten möchten, müssten Sie so etwas tun:
Nun, da String-Interpolation in C # ist, könnten Sie stattdessen etwas ähnliches tun
%Vor%Das mag wie ein triviales Beispiel erscheinen (was es ist), aber die Frage bleibt.
Kann ich das sofort verwenden, muss ich ein paar Tricks machen, damit es funktioniert oder ist es sicher, dass nicht funktioniert?
Das würde ich nicht erwarten, nein. Es wird bis zu einem string.Format
-Aufruf kompiliert, was ich nicht erwarten würde . Wenn Sie wirklich brauchen, um die Projektion im SQL-Teil durchzuführen, können Sie es testen ... aber ansonsten verwenden Sie AsEnumerable()
, wenn Sie den Teil der Abfrage, den Sie benötigen, beendet haben in der Datenbank ausgeführt werden und danach Select
verwenden:
könnten Sie stattdessen so etwas tun
Nicht im allgemeinen Sinne, weil die String-Interpolation nur in einen string.Format
-Aufruf übersetzt wird, wobei die Platzhalter durch Zahlen ersetzt werden und die Werte als Parameter übergeben werden. Dein Format wird also von
bis
%Vor% Da nicht alle Funktionen von string.Format()
(benutzerdefinierte Formatzeichenfolgen, Auffüllung, Ausrichtung usw.) direkt in SQL übersetzt werden können, wird dies nicht unterstützt.
muss ich ein paar Tricks machen, damit es funktioniert oder ist es sicher, dass es nicht funktioniert?
Ich bezweifle, dass Sie Tricks anwenden können, um es in Ling-to-SQL zu verwenden, da Sie intern mit string.Format
arbeiten. Sie könnten alle benötigten Teile abrufen, AsEnumerable
aufrufen, um den Kontext von Linq zu SQL zu Linq-to-Objects zu ändern, und dann die Interpolation in einer nachfolgenden Projektion verwenden, aber in diesem Fall trivialer Fall mit String-Verkettung ist sauberer.
Tags und Links c# entity-framework linq