2014-04-22 13 views
9

Ich benutze Entity Framework und ich habe eine Codezeile, die eine var verwendet und es zurück in einen iint für die Datenbank zu übersetzen.LINQ to Entities erkennt die Methode 'Int32 Parse (System.String)' nicht und diese Methode kann nicht in einen Geschäftsausdruck übersetzt werden

var record = context.enrollments.SingleOrDefault 
    (row => row.userId == int.Parse(UserID) && row.classId == int.Parse(ClassID)); 

Immer wenn ich versuche, es auszuführen, empfange ich rhis Fehler. "LINQ to Entities erkennt die Methode 'Int32 Parse (System.String)' nicht und diese Methode kann nicht in einen Ausdruck für einen Speicher übersetzt werden."

Ich habe dies versucht, so gut

var record = context.enrollments.FirstOrDefault 
    (row => row.userId == Convert.ToInt32(UserID) 
    && row.classId == Convert.ToInt32(ClassID)); 

und alles, was ich erhalten, ist diese Fehlermeldung: „LINQ to Entities erkennt nicht die Methode‚Int32 ToInt32 (System.String)‘Methode, und diese Methode kann nicht übersetzt in einen Laden Ausdruck werden

und schließlich habe ich das auch versucht, die ich kenne, ist ungewöhnlich, aber es hat sich in der Vergangenheit für ähnliche Situationen gearbeitet.

var record = context.enrollments.SingleOrDefault 
    (row => row.userId == CommonDLL.Sanitize<int>.ConvertType(UserID) 
    && row.classId == CommonDLL.Sanitize<int>.ConvertType(ClassID)); 

In dem ich diesen Fehler bekomme. Wie du sehen kannst, habe ich verschiedene Dinge ausprobiert und nichts funktioniert, also wäre jede Hilfe großartig.

+0

Wenn ich mich richtig erinnere, sollten Sie 'int.Parse' durch' Convert.ToInt32' ersetzen können, damit es funktioniert. –

+0

Ich sollte dies in den Kommentaren erwähnt haben, aber ich habe versucht, und ich bekomme diese Fehlermeldung, "{" LINQ to Entities erkennt die Methode "Int32 ToInt32 (System.String)" Methode, und diese Methode kann nicht übersetzt werden in einen Speicherausdruck. "}" – SinceForever

+0

Haben Sie versucht, den vollständigen Namespace wie 'System.Convert.ToInt32' zu verwenden? Ich weiß nicht, ob dies speziell etwas ist, das linq nicht unterstützt. Raten Sie hier. – Bensonius

Antwort

17

in Linq to Entity, sollten Sie die Methoden in Ihrem query verwenden, die von Ihrem provider unterstützt wird sie expression tree konvertieren auf Ihrer Data Base Seite zu laufen.

alle Anbieter müssen einige Methoden unterstützen standardmäßig genannt Canonical Functions (Read More Here), und auch können Sie Ihre user defined function und stored procedure als edm functions definieren in linq query (Read More Here) und (Here) zu verwenden.

Zusätzlich können Sie Methoden verwenden, die von Providern unterstützt werden und in expression tree konvertiert werden können, die in EntityFunctions und SqlFunctions sind.

und schließlich über Ihre Frage, können Sie UserID und ClassID vor Ihrer Abfrage konvertieren, wie folgt aus:

var UID = int.Parse(UserID); 
var CID = int.Parse(ClassID); 
var record = context.enrollments.SingleOrDefault 
    (row => row.userId == UID && row.classId == CID); 
+0

Danke Amir. Ich steckte eine ganze Weile in dieser Sache fest und konnte nirgendwo anders eine Antwort finden. – SinceForever

+0

Sie sind willkommen –

0

Dies funktioniert für mich:

var iId = int.Parse(TextBox1.Text); 
var item = db.Items.Where(p => p.ItemID == iId).FirstOrDefault(); 

Um diese Arbeit zu machen, sollten Sie Ihre konvertieren Textfeldwert außerhalb des Lambda-Ausdrucks.