【发布时间】:2011-02-21 14:24:55
【问题描述】:
我一直在玩表达式树。我有以下通过动态创建表达式树来执行查询的简单方法。 ItemType 在数据库中是一个可为空的 int,在 EF 实体类中也是如此。出于某种原因,尽管查询抛出了
的错误未处理的异常: System.InvalidOperationException: 二元运算符 Equal 未定义 对于类型 'System.Nullable`1[System.Int32]' 和 'System.Int32'。
我不认为我在要求 EF 转换任何东西。我将我的参数定义为int?,这是我认为应该的。
注意,我看过这个
Working with nullable types in Expression Trees
但是这个人正试图传入他的可空 int 值类型为对象,我猜 EF 有问题。我实际上将其声明为正确的类型 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();
}
编辑
我也试过ItemTypeValue.Value - 同样的错误
【问题讨论】:
-
不应该是Expression.Constant(ItemTypeValue.Value)吗?
-
好主意,但不,同样的错误
标签: c# entity-framework expression-trees