Compte tenu d'une Expression<Func<TEntity, bool>>
le long des lignes deExtrait toutes les conditions d'expression par type
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")
)
)
)
Je suis en train d'extraire une des conditions de propriété de liste par type, par exemple
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" } ]
Jusqu'à présent, j'ai créé un ExpressionVisitor
et identifié la méthode VisitBinary
comme celle que je veux brancher afin d'obtenir mes informations.
Je suis toujours à une perte sur
- comment déterminer si le
BinaryExpression
je regarde représente une déclaration terminal (dans le sens où il y a des expressions plus imbriquées que je dois regarder) - comment déterminer le type d'entité que le
BinaryExpression
est concerné - si j'ai besoin de remplacer l'une des autres méthodes
ExpressionVisitor
pour couvrir les cas que je n'ai pas encore considérés.
Pouvez-vous poster le code 'ExpressionVisitor'? – Shlomo