Ada*_*kis 18 c# entity-framework expression-trees
我一直在玩表达树.我有以下简单的方法,通过动态创建表达式树来执行查询.ItemType是数据库中的可空int,也是EF实体类中的可空int .出于某种原因虽然查询引发了错误
未处理的异常:System.InvalidOperationException:没有为类型'System.Nullable`1 [System.Int32]'和'System.Int32'定义二进制运算符Equal.
我不认为我要求EF转换任何东西.我把我的参数定义为int?,这是我认为它应该是.
注意,我看过这个
但是这个家伙正试图传递他作为对象输入的可以为空的int值,我猜这个EF有问题.我实际上是从头开始宣布这是正确的类型.
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();
}
Run Code Online (Sandbox Code Playgroud)
编辑
我也试过 ItemTypeValue.Value - 同样的错误
Mil*_*ric 24
我想你需要转换它
var right = Expression.Constant(ItemTypeValue , typeof(int?))
....
var lambda = Expression.Lambda<Func<T, bool>>(
Expression.Equal(
Expression.Property(param, "ItemType"),
right),
param);
Run Code Online (Sandbox Code Playgroud)