Я пытаюсь динамически строить дерево выражений в С#, которое компилируется и используется как предикат для вызова LINQ-to-SQL Where(). Проблема в том, что я пытаюсь сравнить Enum (с int как его базовый тип) непосредственно с Int, но это не с ошибкой "Member MyEnumType не поддерживает перевод на SQL".
код:
ParameterExpression param = Expression.Parameter(typeof(MyClass), "obj"); //input parameter - this exposes a property of the Enum type
MemberExpression enumMember = Expression.Property(param, "MyEnumProperty"); //used to get the Enum typed property from the parameter
//MISSING STEP TO CAST THE ENUM OF THE MEMBER EXPRESSION TO AN INT?
BinaryExpression binaryExpr = Expression.Equal(enumMember, Expression.Constant(1));
LambdaExpression<Func<MyClass, bool>> whereClause = Expression.Lambda(binaryExpr, param);
//when whereClause is used to filter LINQ-to-SQL results, the error is thrown
Я новичок в деревьях выражений, и я не могу понять это. Я пробовал использовать
Expression.Convert(enumMember, typeof(int))
в качестве первой части BinaryExpression, но это не исправляет ее.
Любая помощь очень ценится.