Передайте выражение в другое выражение в качестве параметра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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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