Usted tendrá que analizar el Expression
que se devuelve desde el Expression
property sobre la aplicación IQueryable<T>
.
Deberá realizar una consulta para llamar al Queryable.Where
method mientras rastrea el árbol Expression
.
También tenga en cuenta que, si bien Queryable.Where
va a ser la forma más común de detectar un filtro where
, la sintaxis de consulta permite otras implementaciones que se utilizarán (dependiendo de qué espacios de nombres se utilizan en la using
directives); si tiene algo que no está utilizando el método de extensión Queryable.Where
, tendrá que buscarlo explícitamente (o utilizar un método más genérico de filtrado para un método Where
que toma un IQueryable<T>
y devuelve un IQueryable<T>
).
El ExpressionVisitor
class (como pointed out by xanatos) proporciona una manera muy fácil de rastrear el árbol Expression
, recomiendo encarecidamente utilizar este enfoque como base para el procesamiento de su árbol Expression
.
Es de destacar que las implementaciones de clase ExpressionVisitor
son necesarias para almacenar y exponer el estado en el nivel de clase. Por eso, sería mejor (IMO) crear clases internas que realicen la acción por única vez y luego tener un método público que crea una nueva instancia del ExpressionVisitor
todo el tiempo; esto ayudará a lidiar con el estado de mutación y, si se hace correctamente, permitirá que el método también sea seguro para la ejecución de subprocesos (si eso es una preocupación del usuario).
¿Por qué? dar más contexto podría ayudar a dar una mejor respuesta –