Использование расширенного выражения LinqKit в конфигурации AutoMapper - PullRequest
0 голосов
/ 15 октября 2018

Я хочу использовать LinqKit расширенные и вызванные выражения для отображения значения в AutoMapper config.

У меня есть некоторая бизнес-логика, представленная как Expression<Func<>>, которую я использую для аккуратного повторного использования кода в различных запросах, используя LinqKit .Однако у меня все та же логика, дублированная в отображении DTO подобного объекта, который я отправляю своему клиентскому приложению для рендеринга.Я хотел бы устранить это повторение, используя тот же подход в моем AutoMapper методе конфигурации.

Служба

// Business logic query
private readonly Expression<Func<Entity, bool>> isActive = e => e.IsActive;

// Getter
public Expression<Func<TestParticipation, bool>> IsActive => this.isActive;

LinqKitактивный запрос

public IQueryable<Entity> GetAllActive() => 
    this.entities
        .All()
        .AsExpandable()
        .Where(e => this.isActive.Invoke(e));

Конфигурация AutoMapper

configuration.CreateMap<Entity, DTO>()
    .ForMember(m => m.IsActive, opt => opt.MapFrom(e => service.IsActive.Invoke(e));

Конечно, реальная бизнес-логика гораздо сложнее и, следовательно, ее гораздо выгоднее использовать повторноэто, вместо того, чтобы держать его в нескольких местах.

Мне кажется, что это должно быть выполнимо, поскольку в запросе вызывается AsExpandable, однако мне еще предстоит понять, как AutoMapper работает в глубине.

В настоящее время выдает:

System.InvalidCastException:
Unable to cast object of type 'System.Linq.Expressions.PropertyExpression' to type 'System.Linq.Expressions.LambdaExpression'.

Возможно ли это и если да - как?

...