我正在尝试使用emum
建立一个动态查询条件enumField & enumValue == enumValue
为此,在分析期间,以下称为
Expression GenerateBitWiseAnd(Expression left, Expression right) {
return Expression.And(left, right);
}
这会引发异常
And binary operator is not defined for `EnumType` and `EnumType`.
等式运算符运行良好
Expression GenerateEqual(Expression left, Expression right) {
return Expression.Equal(left, right);
}
但我无法想象如何在没有And bits运算符的情况下处理[Flags]。
问题是:从这里开始如何动态伪造我的查询来检查我的枚举。
我的应用程序的目标是.Net 4
答案 0 :(得分:1)
您需要先将Enum
转换为其基础类型,然后才能对其进行操作:
Expression GenerateBitWiseAnd(Expression left, Expression right)
{
if (left.Type.IsEnum)
{
var enumType = left.Type;
var compareType = Enum.GetUnderlyingType(enumType);
var enumField = Expression.Convert(left, compareType);
var enumValue = Expression.Convert(right, compareType);
var and = Expression.And(enumField, enumValue);
return Expression.Convert(and, enumType);
}
return Expression.And(left, right);
}