给定一个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
方法来涵盖我尚未考虑的情况。