Ich habe eine Datenbanktabelle, die eine nvarchar-Spalte wie folgt enthält:
%Vor%Ich habe ein Business-Objekt mit einer Decimal [] -Eigenschaft.
Meine LINQ-Abfrage sieht folgendermaßen aus:
%Vor% Dies löst eine NotSupportedException aus: Method 'System.String[] Split(Char[])' has no supported translation to SQL.
Das ist irgendwie nervig :) Gibt es eine Möglichkeit, dies zu tun, ohne eine String-Eigenschaft zum Business-Objekt hinzufügen oder einen anonymen Typ auswählen und dann durchlaufen?
Meine aktuelle "Lösung" ist:
%Vor%Das ist aber mit dieser temporären Liste irgendwie hässlich.
Ich habe versucht, ein let mv = r.MeterValues.Split('|').Select(Decimal.Parse).ToArray()
hinzuzufügen, aber das führt im Wesentlichen zur selben NotSupportedException.
Dies ist .net 3.5SP1, wenn das wichtig ist.
Sie können keine Teilung verwenden, aber in diesem Szenario können Sie Folgendes tun:
%Vor%Dieser Code fügt dem Datenbankwert innerhalb der Abfrage äußere Pipes (|) hinzu, sodass Sie in der Zeichenfolge Start-, Mittel- und Endwertübereinstimmungen durchführen können.
Zum Beispiel sucht der obige Code nach "| 19 |" innen "| 1 | 12.6 | 18 | 19 |", was gefunden und gültig ist. Dies funktioniert für jeden anderen valueToFind .
Leider ist es die IQueryable, die Sie verwenden (Linq to SQL), die die Split-Funktion nicht unterstützt.
Sie haben in diesem Fall wirklich nur die Unterstützung von IEnumerable (Linq to Objects). Ihr zweites Code-Snippet ist das, was Sie tun müssen oder so etwas wie ...
%Vor%Tags und Links .net c# linq linq-to-sql