Передайте выражение в другое выражение в качестве параметраC#

Место общения программистов C#
Anonymous
Передайте выражение в другое выражение в качестве параметра

Сообщение Anonymous »

Моя проблема возникла из-за сложных логических спецификаций многократного использования.

У меня есть следующее выражение:

Код: Выделить всё

Expression userExp =
user => user.UserInRoles.Any(userInRole => userInRole.RoleId == SystemRoles.SysAdmin.Id);
И мне нужно получить способность:

Код: Выделить всё

new CommonContext().Set().Where(estate => userExp.WithParameter(estate.CreatorUser)).ToList();
Итак, как мне передать сущность «Создатель недвижимости» в выражение, которое принимает сущность «Пользователь», и, наконец, использовать конечную сущность выражение в linq to sql ?

Проблема в следующем: WithParameter
РЕДАКТИРОВАТЬ:

Это работает, но неэффективно:

Код: Выделить всё

new CommonContext().Set().ToList().Where(estate => userExp.Compile()(estate.CreatorUser)).ToList()
И следующее не является ответом, поскольку метод Invoke нельзя преобразовать для хранения выражения:

Код: Выделить всё

Expression userExp =
user => user.UserInRoles.Any(userInRole => userInRole.RoleId == SystemRoles.SysAdmin.Id);

Expression propAccessor = estate => estate.ApprovedByUser;

var estateParam = Expression.Parameter(typeof(Estate));
var userParam = Expression.Invoke(propAccessor, estateParam);
var translatedExp = Expression.Invoke(userExp, userParam);
var result = (Expression)Expression.Lambda(translatedExp, estateParam);

var exceptionProvider = new CommonContext().Set().Where(result).ToList();
Но мне нужно что-то, что можно преобразовать в Store Expression
возможно, окончательным решением будет разложение, а затем перекомпоновка выражения, и если да, , как я могу инкапсулировать его для повторного использования в подобных ситуациях? (поскольку это то, что я пытаюсь сделать)

Подробнее здесь: https://stackoverflow.com/questions/264 ... -parameter

Вернуться в «C#»