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
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);