Si dovrà analizzare il Expression
che viene restituito dalla Expression
property sul IQueryable<T>
implementazione .
È necessario eseguire una query per chiamare Queryable.Where
method mentre si esegue la ricerca per indicizzazione dell'albero Expression
.
noti inoltre che mentre Queryable.Where
sta per essere il modo più comune per rilevare un filtro where
, sintassi di query consente altre implementazioni da utilizzare (a seconda di ciò namespace sono utilizzati nella using
directives); se si dispone di qualcosa che non utilizza il metodo di estensione Queryable.Where
, sarà necessario cercarlo esplicitamente (o utilizzare un metodo di filtro più generico per un metodo Where
che prende un IQueryable<T>
e restituisce un IQueryable<T>
).
Il ExpressionVisitor
class (come pointed out by xanatos) fornisce un modo molto semplice di strisciare dell'albero Expression
, Mi consiglia di utilizzare questo approccio come base per l'elaborazione della Expression
albero.
Di nota è che le implementazioni di classe ExpressionVisitor
sono necessarie per memorizzare ed esporre lo stato a livello di classe. Per questo motivo, sarebbe meglio (IMO) creare classi interne che eseguono l'azione una volta sola e quindi disporre di un metodo pubblico che crei ogni volta una nuova istanza di ExpressionVisitor
; questo aiuterà a gestire lo stato di mutamento e, se fatto correttamente, permetterà anche al metodo di essere sicuro per i thread (se questo è un tuo problema).
Perché? dare più contesto potrebbe aiutare a dare una risposta migliore –