给定一个类似于 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所涉及的实体类型 - 是否需要覆盖其他ExpressionVisitor方法以涵盖我尚未考虑的情况。
ExpressionVisitor
的代码吗? - Shlomo