Estoy intentando construir dinámicamente un árbol de expresiones en C#, que se compila y usa como el predicado de la llamada WhereQ (LINQ-to-SQL). El problema es que estoy tratando de comparar un Enum (con int como su tipo subyacente) directamente contra un Int, pero esto está fallando con el error "El miembro MyEnumType no tiene traducción soportada a SQL".¿Cómo convierto un Enum a un Int para usar en una operación Expression.Equals?
Código:
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
yo soy bastante nuevo en los árboles de expresión y no puedo resolver esto. He intentado usar
Expression.Convert(enumMember, typeof(int))
como la primera parte de BinaryExpression pero esto no lo arregla.
Cualquier ayuda es muy apreciada.
tienen ni idea sobre el valor de cómo obtener de enumeración en árbol de expresión –
Después de un poco más de excavación, he decidido que el problema aquí es con mi entendimiento LINQ a SQL en lugar de con la Expresión misma. La propiedad Enum en mi objeto entidad no es realmente una columna en la base de datos; Creo que es por eso que no es capaz de traducirlo a una cláusula where. Voy a tomar un enfoque diferente, pero si alguien tiene alguna idea, no dude en compartir. –
¿Puede proporcionar el código para MyClass también? El código que tiene actualmente en la publicación es bastante repetitivo, no hay mucho que contar desde aquí ... – code4life