表达树和可空类型

时间:2011-02-21 14:24:55

标签: c# entity-framework expression-trees

我一直在玩表情树。我有以下简单的方法,通过动态创建表达式树来执行查询。 ItemType是数据库中的可空int,以及EF实体类。出于某种原因,虽然查询引发错误

  

未处理的例外情况:   System.InvalidOperationException:The   二进制运算符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 - 同样的错误

1 个答案:

答案 0 :(得分:24)

我认为你需要转换它

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

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