Dato un Expression<Func<TEntity, bool>>
lungo le linee diestratto tutte le condizioni di Espressione per tipo
entity => entity.SubEntity.Any(
subEntity => (
(subEntity.SomeProperty == False)
AndAlso
subEntity.SubSubEntity.FooProperty.StartsWith(
value(SomeClass+<>c__DisplayClass0).ComparisonProperty
)
AndAlso
subEntity.SubSubEntity.BarProperty == "Bar"
AndAlso
subEntity.SubSubEntity.SubSubSubEntity.Any(
subSubSubEntity => (x.SubSubSubSubEntity.BazProperty == "whatever")
)
)
)
Sto cercando di estrarre un condizioni di proprietà elenco per tipo, vale a dire
TEntity : [ /* no conditions for immediate members of TEntity */ ]
TSubEntity : [ { SomeProperty == False } ]
TSubSubEntity : [ { FooProperty.StartsWith(/* ... */) },
{ BarProperty == "Bar" } ],
TSubSubSubEntity : [ /* no conditions for immediate members of TSubSubSubEntity */ ],
TSubSubSubSubEntity : [ { BazProperty == "whatever" } ]
Finora, ho creato un ExpressionVisitor
e identificato il metodo VisitBinary
come quello che voglio collegare per ottenere le mie informazioni.
Sono ancora in perdita su
- come determinare se il
BinaryExpression
sto guardando rappresenta una dichiarazione terminale (nel senso che non ci sono le espressioni più nidificate che ho bisogno di guardare) - come determinare il tipo di Entità che il
BinaryExpression
riguarda - se è necessario sostituire uno degli altri metodi
ExpressionVisitor
per coprire casi che non ho ancora considerato.
puoi pubblicare il codice 'ExpressionVisitor'? – Shlomo