String.Split in einer Linq-To-SQL-Abfrage?

8

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.

    
Michael Stum 29.11.2010, 00:26
quelle

4 Antworten

6

Sie müssen die select -Klausel auf dem Client ausführen, indem Sie zuerst .AsEnumerable() aufrufen:

%Vor%     
SLaks 29.11.2010, 00:32
quelle
2

Sie müssen keine temporäre Liste verwenden:

%Vor%     
Thomas Levesque 29.11.2010 00:35
quelle
2

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 .

    
mhapps 23.01.2017 13:29
quelle
1

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%     
Tim Jarvis 29.11.2010 00:33
quelle

Tags und Links