2012-11-14 64 views
0

我需要在運行時創建依賴於查詢的表達式。枚舉有<隱含的運營商=但是當我建立的是表達我得到此操作不存在使用枚舉構建LessThanOrEqual表達式

public enum A 
{ 
    A1, 
    A2, 
    A3 
}; 

public class AA 
{ 
    public A myA { get; set; } 
    public int myB { get; set; } 
}; 

ParameterExpression pe = Expression.Parameter(typeof(AA), "p"); 

Expression.LessThanOrEqual(Expression.Property(
            pe, 
            typeof(AA).GetProperty("myA")), 
            Expression.Constant(A.A1, typeof(A))); 

是有可能創造這樣的表達異常?

回答

1

看來<=運算符沒有在枚舉上定義,而是在枚舉類型上,它是整數。所以在你的情況下,你可以使用

Expression.LessThanOrEqual(Expression.Convert(Expression.Property(
    pe, 
    typeof(AA).GetProperty("myA")), typeof(int)), 
    Expression.Convert(Expression.Constant(A.A1, typeof(A)), typeof(int)));