Automapper的`ProjectTo`是否与`Expression`参数一起使用

时间:2018-08-09 10:23:28

标签: mapping automapper

“为什么”

我有一个相当长而讨厌的查询,用于映射复合数据。

项目设置是将 AutoMapper 配置保存在 ViewModels 中。由于我的查询很长,并且涉及很多业务逻辑,并且有可能被重用,因此我很想将其提取到服务中。

我的尝试

知道ProjectTo支持object parameters作为第二个参数,我在服务中创建了一个 Expression属性,如下所示:

Expression<Func<User, IQueryable<string>>> Filter { get; }

并将其作为参数传递给AutoMapper:

this.DataRepository.All().ProjectTo<ViewModel>(
    ConfigurationProvider, 
    new { filter = service.Filter })

ConfigurationProvider是标准的 AutoMapper 提供程序,而service是-我的服务。

视图模型中的

映射方法如下:

Expression<Func<User, IQueryable<string>>> filter = null;

configuration.CreateMap<User, ViewModel>()
    .ForMember(
        m => m.MyProperty,
        opt => opt.MapFrom(filter));

这是教科书示例,如AutoMapper docs

中提供

结果

这种确切的方法在我传递IQueryable<Entities>之前就起作用了,但是,如果我尝试传递 Expression filter变量只会保留null。显然,这会导致映射后为空值。

为什么 AutoMapper 无法解析表达式

0 个答案:

没有答案