Int.Parse in Linq-Ausdruck

8

Ich habe folgenden Ausdruck linq. Ich möchte die Summe numerischer Werte im Nvarchar-Feld berechnen. Ich verwende folgenden Code, um dies zu tun. Aber ich bekomme einen Fehler, wenn ich versuche, das auszuführen.

%Vor%

Fehlerbeschreibung:

  

LINQ to Entities erkennt die Methode 'Int32 nicht   Parse (System.String) 'Methode, und diese Methode kann nicht übersetzt werden   in einen Geschäftsausdruck   

Wie kann ich dieses Problem lösen und diesen Code besser schreiben?

Ich ändere den Code zu diesem

%Vor%

, aber erhalte diesen Fehler

    
Pouya 25.08.2012, 00:38
quelle

7 Antworten

4

Sie können int.parse in where nicht verwenden. Sie können Ihre Abfrage wie folgt neu schreiben:

%Vor%

Rufen Sie die Methode .ToList() auf und verwenden Sie int.Parse(variable) .

Einen schönen Tag noch.

    
Pouya 25.08.2012, 01:58
quelle
7

EF 5:

Anstelle von int.Pasrse verwenden Convert.ToInt32 . Entity Framework generiert korrekte CAST -Funktionen in SQL.

EF 6:

Kurze Antwort:

%Vor%

Lange Antwort:

In EF 6 müssen Sie einen numerischen Wert in einen String konvertieren mit SqlFunctions.StringConvert . aber es hat ein Problem. Es fügt dem Ergebnis unnötige Leerzeichen hinzu. Der Vergleich wird also fehlschlagen. Deshalb habe ich Trim() dort hingelegt. Ich habe es mit EF 6.1.1 getestet.

    
Mahmoodvcs 25.06.2014 13:52
quelle
6

Entity Framework kann diesen Konvertierungstyp nicht in SQL übersetzen.

Besteht die Möglichkeit, dass Sie Ihre Datenstruktur ändern können, um geeignete Datentypen zu verwenden, z. B. die tatsächlichen DateTime -Typen? Bei großen Datenmengen beeinträchtigen solche Konvertierungen die Leistung.

Ich würde empfehlen, entweder Ihre Datenmodelltypen zu ändern, um diese Konvertierungen zu vermeiden, oder , wenn die Datenmenge immer klein ist , dann zuerst die Daten zu erhalten und später Linq zu Objects.

    
Pablo Romeo 25.08.2012 01:10
quelle
6

Ersetze alle deine int.Parse durch SqlFunctions.StringConvert(variable) . Es gibt keine Funktion zum Konvertieren von String in Int. Sie sollten versuchen, die Umkehrung zu machen und Ihr Int in String mit StringConvert zu konvertieren.

Die SqlFunctions-Dienstprogramme können den Befehl im SQL-Befehl übersetzen.

    
Alexandre Jobin 25.08.2012 00:59
quelle
4

In Ihrer where-Klausel können Sie int.Parse nicht aufrufen. Entity Framework weiß nicht, wie das in SQL konvertiert wird. Überlegen Sie, Ihre Where zu überarbeiten.

    
Daniel A. White 25.08.2012 00:44
quelle
0

Wenn Sie sicherstellen müssen, dass eine CLR-Methode in LINQ to Entities verwendet werden kann, sollten Sie diese Quelle konsultieren: Ссылка .

Nicht ein schnelles Lesen, es braucht Zeit, aber hier ist die Antwort auf Ihre Frage (und viele mehr mögen es).

    
Alexander Christov 31.08.2015 14:49
quelle
-1

Es gibt eine schlecht gebaute Datenbank, die ich nicht bearbeiten kann, sondern benutzen muss.

Ich benutze das in Linq-To-Sql und es funktioniert.

Wirf die Zeichenkette zuerst auf das Objekt und dann auf int.

%Vor%     
Yasin Kilicdere 11.03.2014 16:37
quelle

Tags und Links