Объединение лямбда-выражений в пути свойств
Мне нужно было бы объединить 2 лямбда-выражения в 1:
Это послужит мне для создания расширения для безопасного типа (для EF).
Теперь вы можете сделать:
context.House
.Include(x => x.Doors.Doorknobs)
Я хотел бы разделить вышеупомянутое выражение на разные методы.
что-то вроде IncludeDoorKnobs (запрос, выражениеFromRoot, выражениеFromCurrentToChild)
Тогда я бы хотел
- Включить комбинированное выражение в запрос
- Включить дополнительные дочерние элементы (из текущего) в этот запрос
- Вызовите другие аналогичные методы, включая другую часть дерева.
Мои знания о лямбда явно не оправдываются, и мне действительно нужно скоро войти в них, но пока я должен прибегнуть к SOF...
Ответы
Ответ 1
С LINQ-to-SQL это будет тривиально; вы просто используете Expression.Invoke
, чтобы сказать ему использовать существующее подвыражение (с заменой параметров) в данной точке. Тем не менее, EF не поддерживает (или не последний раз, когда я проверил), поддерживаю это.
К сожалению, процесс объединения двух выражений без этого... сложный; вам необходимо полностью перестроить внутреннее дерево, выполнив ручную замену для таких вещей, как параметры. У меня был код, который сделал это, но это далеко не просто (и это не "рука" ).
Но мне интересно: действительно ли это стоит сложность?