Expression Trees und NULL-Typen

c# entity-framework expression-trees

Frage

Ich habe mit Expression Trees gespielt. Ich habe die folgende einfache Methode, die eine Abfrage ausführt, indem Sie dynamisch einen Ausdrucksbaum erstellen. ItemType ist ein Nullable-Int in der Datenbank und auch in der EF-Entitätsklasse . Aus irgendeinem Grund, obwohl die Abfrage den Fehler von

Nicht behandelte Ausnahme: System.InvalidOperationException: Der binäre Operator Equal ist nicht für die Typen 'System.Nullable`1 [System.Int32]' und 'System.Int32' definiert.

Ich glaube nicht, dass ich EF auffordere, etwas zu konvertieren. Ich habe meinen Parameter als int? definiert int? , das ist, was ich dachte, dass es sein sollte.

Beachte, ich habe mir das angesehen

Mit NULL-fähigen Typen in Expression Trees arbeiten

Aber dieser Kerl versucht, seinen nullbaren Int-Wert einzugeben, der als Objekt eingegeben wurde, mit dem EF, mit dem ich Probleme habe, Probleme hat. Ich erkläre das tatsächlich als den richtigen Typ ab initio .

   public void GetResultCollection<T>() {
        MyEntities db = new MyEntities();
        var result = db.CreateQuery<T>(String.Format("[{0}]", typeof(T).Name + "s"));

        int? ItemTypeValue = 1;

        var param = Expression.Parameter(typeof(T));

        var lambda = Expression.Lambda<Func<T, bool>>(
            Expression.Equal(
                Expression.Property(param, "ItemType"),
                Expression.Constant(ItemTypeValue)),
            param);

        var list = result.Where(lambda).ToList();
    }

BEARBEITEN

Ich habe auch versucht, ItemTypeValue.Value - der gleiche Fehler

Akzeptierte Antwort

Ich denke, du musst es umwandeln

var right = Expression.Constant(ItemTypeValue , typeof(int?))
....

 var lambda = Expression.Lambda<Func<T, bool>>(
            Expression.Equal(
                Expression.Property(param, "ItemType"),
                right),
            param);



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