2

我正在尝试在 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 位运算符的情况下处理 [Flags] 。

问题是:从这里如何动态伪造我的查询来检查我的枚举。

我的应用程序针对.Net 4

4

1 回答 1

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);
}
于 2013-06-06T18:40:41.657 回答