Объединение лямбда-выражений в пути свойств

Мне нужно было бы объединить 2 лямбда-выражения в 1:

Это послужит мне для создания расширения для безопасного типа (для EF).

Теперь вы можете сделать:

context.House
.Include(x => x.Doors.Doorknobs)

Я хотел бы разделить вышеупомянутое выражение на разные методы.

что-то вроде   IncludeDoorKnobs (запрос, выражениеFromRoot, выражениеFromCurrentToChild)

Тогда я бы хотел - Включить комбинированное выражение в запрос - Включить дополнительные дочерние элементы (из текущего) в этот запрос - Вызовите другие аналогичные методы, включая другую часть дерева.

Мои знания о лямбда явно не оправдываются, и мне действительно нужно скоро войти в них, но пока я должен прибегнуть к SOF...

Ответ 1

С LINQ-to-SQL это будет тривиально; вы просто используете Expression.Invoke, чтобы сказать ему использовать существующее подвыражение (с заменой параметров) в данной точке. Тем не менее, EF не поддерживает (или не последний раз, когда я проверил), поддерживаю это.

К сожалению, процесс объединения двух выражений без этого... сложный; вам необходимо полностью перестроить внутреннее дерево, выполнив ручную замену для таких вещей, как параметры. У меня был код, который сделал это, но это далеко не просто (и это не "рука" ).

Но мне интересно: действительно ли это стоит сложность?