Estoy trabajando en un código de árbol de expresiones escrito por un colega y estoy buscando la posibilidad de agregar expresiones adicionales. Actualmente admite: iguales, no iguales, IsNull, etc. Necesito agregar algo que le permita usar una comparación comodín similar al comando SQL "Me gusta" o usar expresiones regulares. Por el momento, el código analiza un archivo XML y extrae los datos que luego se procesan usando un código similar a la línea que se muestra a continuación. Este es un ejemplo de la expresión "Igual". "CallExp" es una MemberExpression que básicamente contiene el nombre de campo de mi tabla (Entities) y GetConstantExpression obtiene detalles sobre los datos que estoy comparando.Cómo crear un árbol de expresiones para hacer algo similar al comando SQL "Me gusta"
xRet = Expression.MakeBinary(ExpressionType.Equal, callExp, GetConstantExpression(element.Element("Value"), callExp.Type));
lo que busco es una manera de crear una “expresión” que es similar al comando “Me gusta”. ¿Se puede hacer esto usando unas líneas similares a las anteriores o será más complejo? ¿Algún buen recurso que podría ayudar en esta área?
============================================== ====================================
nuevo código basado en la retroalimentación:
Estaba viendo algunos ejemplos e intenté lo siguiente, que esperaba que me creara una Expresión. Me da el error que se muestra a continuación. ¿Voy en la dirección correcta para crear una expresión "StartsWith"? _entityExp es una referencia de ParameterExpression a MyClass.
ParameterExpression p = Expression.Parameter(_entityExp.Type, "entity");
MethodInfo method = typeof(string).GetMethod("StartsWith", new[] { typeof(string) });
var containsMethodExp = Expression.Call(p, method, Expression.Constant("root"), p);
Método 'booleana StartsWith (System.String)' declarada el tipo 'System.String' no puede ser llamado con instancia de tipo 'MiClase'
He decidido probar el funcionamiento de "StartsWith". He editado el código anterior, pero recibo un error. ¿Estoy yendo en la dirección correcta con esto? – Retrocoder
@Retrocoder: No, el error es bastante correcto. Está intentando llamar a 'string.StartsWith (string)' pero suministrando un argumento que no es de cadena. O bien debe cambiar el argumento para que sea una cadena o escribir su propio método 'StartsWith' con la firma que necesita. –