Как сделать умное преобразование лямбда-выражений между DTO и target-классом? - PullRequest
0 голосов
/ 20 августа 2009

У меня есть проблема, чтобы решить здесь:

На верхних слоях мы работаем с dto. Мы используем Entity Framework на уровне данных, работая с сущностями, конвертируя результаты в dtos.

У нас есть несколько пользовательских поисков, выполняемых в верхних слоях, вопрос: как перевести эти лямбда-выражения между классами, если предположить, что каждое свойство имеет одинаковые имя и тип?

1 Ответ

1 голос
/ 20 августа 2009

Можете ли вы написать интерфейс, содержащий общие свойства, заставить соответствующие классы реализовать этот интерфейс, а затем переписать лямбда-выражения для него?

Изменить: так как вы не можете сделать это, это становится намного сложнее. Я вижу два варианта:

  1. Создание деревьев выражений с нуля во время выполнения (много работы, особенно если ваши лямбды сложные, и к тому же подвержены ошибкам);

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

Я бы настоятельно предпочел 2, поскольку вы можете продолжать писать лямбда-коды в коде; во время выполнения вы просто делаете относительно простую замену в дереве выражений. Это единственное решение для любых лямбд, которые у вас есть сейчас и которые вы найдете в будущем.

...