我想在C#中動態構建一個表達式樹,它被編譯並用作LINQ-to-SQL Where()調用的謂詞。問題是,我試圖直接將一個Enum(使用int作爲它的基礎類型)與Int進行比較,但是這個失敗的錯誤是「成員MyEnumType沒有支持到SQL的轉換」。如何將Enum轉換爲Int以用於Expression.Equals操作?
代碼:
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的第一部分,但是這不能解決它。
任何幫助,非常感謝。
沒有關於枚舉的表達式樹 – 2010-09-03 12:07:35
該如何獲得價值多一些挖後的想法,我已經決定,這裏的問題是我的理解LINQ到SQL,而不是與表達式本身。我實體對象上的Enum屬性實際上並不是數據庫中的一列;我想這就是爲什麼它不能將它翻譯成where子句。我將採取不同的方法,但如果任何人有任何見解,請隨時分享。 – 2010-09-03 12:12:42
你能提供MyClass的代碼嗎?您目前在帖子中的代碼是相當的樣板,從這裏沒有太多的說明... – code4life 2010-09-03 12:26:02