如何组合两个表达式树体

本文关键字:两个 表达式 组合 何组合 | 更新日期: 2023-09-27 18:25:18

如果我有:

m => m.OwnedCollection(p => p.Addresses)

m => m.OwnedCollection(p => p.Contacts)

我想把它们组合成:

m => m.OwnedCollection(p => p.Addresses).OwnedCollection(p => p.Contacts)

有办法做到这一点吗?

我也希望能够结合:

m => m.OwnedCollection(p => p.Contacts)

和:

with => with.AssociatedCollection(p => p.AdvertisementOptions)

将:

m => m.OwnedCollection(p => p.Contacts, with => with.AssociatedCollection(p => p.AdvertisementOptions))

有没有办法也这样做?

我希望这些都是相当简单的要求,但我发现很难掌握术语。

一些背景:

我正在使用https://github.com/refactorthis/GraphDiff以支持合并实体进行更新。问题是它期望一个描述祖先关系的表达式树被更新,例如

context.UpdateGraph(company, map => map
    .OwnedCollection(p => p.Contacts, with => with
        .AssociatedCollection(p => p.AdvertisementOptions))
    .OwnedCollection(p => p.Addresses)
);

我的需要是一个通用的解决方案,所以我需要使用反射来检查实体类型的各种一对一、一对多和多对多关系,并将它们转换为表达式树。

如对我的具体问题有任何帮助或一般帮助,我们将不胜感激。

如何组合两个表达式树体

GraphDiff的develop分支提供了对基于属性的映射的支持。不提供映射图形的表达式树,而是将自定义属性(OwnedAssociated)添加到模型类中的导航属性,GraphDiff将为您创建映射。看看GraphDiffs测试模型中的一些例子。