У меня есть следующее выражение:
Код: Выделить всё
Expression userExp =
user => user.UserInRoles.Any(userInRole => userInRole.RoleId == SystemRoles.SysAdmin.Id);
Код: Выделить всё
new CommonContext().Set().Where(estate => userExp.WithParameter(estate.CreatorUser)).ToList();
Проблема в следующем: WithParameter
РЕДАКТИРОВАТЬ:
Это работает, но неэффективно:
Код: Выделить всё
new CommonContext().Set().ToList().Where(estate => userExp.Compile()(estate.CreatorUser)).ToList()
Код: Выделить всё
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();
возможно, окончательным решением будет разложение, а затем перекомпоновка выражения, и если да, , как я могу инкапсулировать его для повторного использования в подобных ситуациях? (поскольку это то, что я пытаюсь сделать)
Подробнее здесь: https://stackoverflow.com/questions/264 ... -parameter