Получить объект из выражения выражения фильтра делегата> - PullRequest
2 голосов
/ 01 февраля 2012

Использование выражения лямбда-делегата> - где мое выражение принимает объект Role (POCO).

Предполагается использовать этот объект POCO Role и сопоставить его с объектом Role слоя данных с соответствующими свойствами. Для этого мне нужно иметь возможность получить объект Role от делегата.

Пример:

public List<Role> FindAll(Expression<Func<Role, bool>> filter)

Вызов этого метода как:

FindAll(r => r.Name == role.Name);

r имеет тип Role, и в функции FindAll я вижу, что фильтр имеет один параметр, как таковой:

enter image description here

Могу ли я извлечь этот объект? И как?

Я уверен, что это ДОЛЖНО быть выполнимым, в конце концов, linq всегда делает это внутренне ...

1 Ответ

2 голосов
/ 01 февраля 2012

Здесь есть две роли: r, который представляет параметр фильтра, и role, который является объектом, который закрыт лямбда-выражением. Я предполагаю, что вы имеете в виду, что вам нужна ссылка на объект role, поскольку вы уже нашли ParameterExpression, который представляет r.

Этот объект будет ConstantExpression, типом которого является Role, и это будет значение Expression свойства MemberAccessExpression, которое представляет role.Name. Это будет правая часть выражения BinaryOperator, представляющая тест на равенство, который служит Body лямбда-выражения.

Это то, что вам нужно?

...