es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Es posible analizar un Delegado de C#?

Me gustaría poder analizar un predicado y ver las propiedades que se han establecido y los valores a los que se han establecido. ¿Es esto posible?

Por ejemplo, dado un predicado de Persona, me gustaría poder ver las expresiones proporcionadas, como en:

Id > 5

o

Name = "Will"

etc.

He estado explorando cosas diferentes, pero no creo que esté en el camino correcto y no puedo encontrar un ejemplo. Encontré esto: https://stackoverflow.com/questions/9802269/convert-predicatet-to-expressionfunct-bool pero los encuestados parecían desaconsejar fuertemente este enfoque. ¿Alguien tiene alguna idea al respecto?

Para que conste, estoy tratando de convertir el predicado en una cláusula WHERE SQL en línea.

“`internal class Parser
{
private IEnumerable<person> people;
public Parser(params Person[] people)
{
this.people = new List<person>(people);
}

<pre><code>public IEnumerable<person> Parse(Predicate<person> predicate)
{
//IFormatter formatter = new BinaryFormatter();
//IFormatterConverter converter = new FormatterConverter();
//SerializationInfo info = new(typeof(Person), converter);
//StreamingContext streamingContext = new StreamingContext();
//predicate.GetObjectData(info, streamingContext);

var invocationList = predicate.GetInvocationList();

return Enumerable.Empty<person>();
}
</code></pre>

}“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en c#, delegados y predicados, es posible analizar un predicado y ver las propiedades que se han establecido y los valores a los que se han establecido. Un enfoque posible es usar la clase ExpressionVisitor en el espacio de nombres System.Linq.Expressions para recorrer el predicado y extraer la información relevante.

    Aquí hay una implementación de muestra del método Parse que usa ExpressionVisitor:

    La implementación anterior define una clase de visitante PredicateParserVisitor que deriva de ExpressionVisitor. Cuando se llama al método Visit del visitante con el predicado como argumento, visita recursivamente todos los nodos en el árbol de expresiones y extrae información relevante a una lista de objetos Condition, que representan las condiciones analizadas. La clase Condition contiene el nombre de la propiedad y su valor.

    El analizador luego puede usar las condiciones analizadas para generar la cláusula WHERE de SQL o realizar otras acciones según sea necesario. Tenga en cuenta que la implementación de muestra solo maneja los operadores igual y mayor que, pero puede ampliarlo para manejar otros operadores según sea necesario.

    Al usar ExpressionVisitor para analizar el predicado, puede extraer fácilmente la información requerida y luego usarla según sea necesario.

Comments are closed.