【发布时间】:2016-01-27 16:24:40
【问题描述】:
给定一个Expression<Func<TEntity, bool>>
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")
)
)
)
我正在尝试按类型提取列表属性条件,即
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" } ]
到目前为止,我已经创建了一个ExpressionVisitor 并将VisitBinary 方法确定为我想要插入以获取我的信息的方法。
我还是一头雾水
- 如何确定我正在查看的
BinaryExpression是否代表终端语句(在某种意义上,我不需要查看更多嵌套表达式) - 如何确定
BinaryExpression关注的Entity类型 - 我是否需要覆盖任何其他
ExpressionVisitor方法以涵盖我尚未考虑的情况。
【问题讨论】:
-
你能贴出
ExpressionVisitor的代码吗?
标签: c# lambda expression expression-trees expressionvisitor