Как мне объединить два тела дерева выражений?

1

Если бы у меня был:

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 для поддержки объединения объектов для обновлений. Проблема в том, что он ожидает, что дерево выражений, описывающее взаимосвязь enitity, будет обновляться, например.

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

Mine должно быть общим решением, поэтому мне нужно изучить различные отношения один-к-одному, один-ко-многим и многие-ко-многим из моих сущностей, используя отражение и преобразовать их в дерево выражений.

Любая помощь по моим конкретным вопросам или общей помощи будет оценена по достоинству.

Теги:
linq
lambda
expression
graphdiff

1 ответ

2
Лучший ответ

develop ветвь GraphDiff обеспечивает поддержку отображения на основе атрибутов. Вместо предоставления дерева выражений, отображающего ваш график, вы добавляете собственные свойства (Owned or Associated) к свойствам навигации в ваших классах моделей, а GraphDiff создает для вас сопоставление. Посмотрите на тестовые модели GraphDiffs для некоторых примеров этого.

  • 0
    Спасибо @andyp. Я нашел это и скоро перейду к нему. Тем временем я создал интерфейс IMergeable с методом Mapping и возвратил выражение для этого класса в этом методе. В своем репозитории я проверяю, является ли объект IMergeable, и вызываю метод отображения, чтобы передать это в graphdiff.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню