【发布时间】:2010-09-03 11:02:59
【问题描述】:
我正在尝试在 C# 中动态构建一个表达式树,它被编译并用作 LINQ-to-SQL Where() 调用的谓词。问题是我试图将 Enum(以 int 作为其基础类型)直接与 Int 进行比较,但这失败并出现错误“成员 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 的第一部分,但这并不能解决问题。
非常感谢任何帮助。
【问题讨论】:
-
不知道如何在表达式树中获取枚举值
-
经过更多挖掘,我认为这里的问题在于我对 LINQ-to-SQL 的理解,而不是表达式本身。我的实体对象上的 Enum 属性实际上不是数据库中的列;我认为这就是为什么它无法将其翻译为 where 子句的原因。我将采取不同的方法,但如果有人有任何见解,请随时分享。
-
能否也提供 MyClass 的代码?您目前在帖子中的代码是相当样板的,从这里没什么可说的......
标签: c# linq-to-sql expression-trees