объединение лямбда-выражений в пути свойств - PullRequest
4 голосов
/ 15 июня 2009

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

Это послужит мне для создания расширения для типовобезопасных включений (для EF).

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

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

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

что-то вроде IncludeDoorKnobs (запрос, expressionFromRoot, expressionFromCurrentToChild)

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

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

1 Ответ

1 голос
/ 15 июня 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...