Подтвердить что ты не робот

Деревья выражений и типы Nullable

Я играл с деревьями выражений. У меня есть следующий простой метод, который выполняет запрос путем динамического создания дерева выражений. ItemType - это нулевая int в базе данных, а также в классе сущности EF. По какой-то причине, хотя запрос выдает ошибку

Необработанное исключение: System.InvalidOperationException: двоичный оператор Equal не определен для типов 'System.Nullable`1 [System.Int32]' и 'System.Int32'.

Я не думаю, что я прошу EF конвертировать что-либо. У меня есть параметр, указанный как int?, который, как я думал, должен быть.

Заметьте, я посмотрел на это

Работа с типами NULL в деревьях выражений

Но этот парень пытается передать его значение nullable int, введенное как объект, с которым, по моему мнению, возникают проблемы. Я на самом деле объявляю это правильным типом 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 - ту же ошибку

4b9b3361

Ответ 1

Я думаю, вам нужно его преобразовать

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

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