Entity Framework - Linq - Es kann kein konstanter Wert vom Typ "System.Object" erstellt werden. Nur primitive Typen

entity-framework expression-trees linq

Frage

Ich habe eine Methode, um einen Ausdruck für eine Linq-Abfrage für einen bestimmten Typ, eine Eigenschaft und einen Wert zu erstellen. Das funktioniert wunderbar, solange die Eigenschaft auf dem Typ NULL nicht möglich ist. Hier ist das Beispiel, von dem ich arbeite ( http://www.marcuswhitworth.com/2009/12/dynamic-linq-with-expression-trees ) Ich rufe die Equals-Methode für die Eigenschaft auf. Ich habe jedoch festgestellt, dass die Equals-Methode für Nullable-Typen ein Object als Parameter anstelle des Nurable-Typs verwendet. Ich habe versucht, GetValueOrDefault zu verwenden, um die Nullwerte auszublenden, aber EF unterstützt diese Methode nicht. Als ein einfaches Beispiel wird der folgende Code einen Fehler werfen:

decimal? testVal = new decimal?(2100);
        var test = (from i in context.Leases where i.AnnualRental.Equals(testVal) select i).ToList();

Wenn Sie jedoch == anstelle der Equals () -Methode verwenden, funktioniert es OK. Ich bin mir nicht sicher, wie man den zu verwendenden Code == anstelle von Equals () konvertiert. Irgendwelche Vorschläge werden sehr geschätzt.

Beliebte Antwort

Wenn Sie == sagen, erzeugen Sie einen BinaryExpression mit NodeType als ExpressionType.Equal . http://msdn.microsoft.com/en-us/library/bb361179.aspx

Wenn Sie .Equals(x) sagen, generieren Sie eine MethodCallExpression . Die MethodCallExpression s, die LinqToEntities in Sql übersetzen kann, ist eine Liste mit Einschränkungen (z. B. befinden sich keine Ihrer eigenen undekorierten Methoden in dieser Liste). Nullable<T>.Equals(x) ist anscheinend nicht auf dieser Liste.

Sagen Sie nicht .Equals(x) zu LinqToEntities.




Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum