how to build expression tree for multiple level reference property(linked property)?
For example, let's say i have a string property "Document.DocumentType.DocumentCode" with DocumentCode is a nullable decimal type.
How can I build an expression tree for this: x.Document.DocumentType.DocumentCode.开发者_如何学运维GetValueOrDefault() == 4?
For my real case, I won't know exactly what the linked string property will look like or the levels of properties.
Well, that tree is:
- An equality match, where the left hand side is complicated and the right hand side is a constant expression 4.
- The LHS is a method call
GetValueOrDefault()on (an expression) - The expression from the previous step is a property access expression
DocumentCodeon (an expression) - The expression from the previous step is a property access expression
DocumentTypeon (an expression) - The expression from the previous step is a property access expression
Documenton aParameterExpression
Start from the bottom, and build it up from there. In other words, if you know you're only going to have properties, you'll want to:
- Split the string by "."
- Create a
ParameterExpression Loop round the set of properties, adding another layer or property access each time, e.g.
currentExpression = Expression.Property(currentExpression, propertyName);Add a method call at to the expression
- Build an equality comparison using that and whatever constant value you're given
加载中,请稍侯......
精彩评论