Я хочу использовать 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'.
Возможно ли это и если да - как?