在AutoMapper配置中使用LinqKit的扩展表达式

时间:2018-10-15 17:00:31

标签: automapper linqkit

我想使用 LinqKit 扩展并调用表达式来映射 AutoMapper 配置中的值。

我有一些业务逻辑,表示为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'.

这是否可能?如果可以,怎么办?

0 个答案:

没有答案