Automapper 5,映射表达式的问题

时间:2017-02-27 12:30:26

标签: c# linq-expressions automapper-5

我有一个简单的数据读取器类来从我的数据库中读取'CspUsageDetails_Live'实体。它们使用自动映射器映射到CspUsageDetailImportD到模型和从CspUsageDetailImportD映射。

reader类有一个名为Get的方法,它接受表达式Expression<Func<CspUsageDetailImportDto, bool>>。在将其传递给实体框架之前,我需要将其映射到Expression<Func<CspUsageDetails_Live, bool>>。所有代码(包括表达式的映射)运行正常,直到我调用if (liveEntities.Any()) 这里我收到一个错误'参数类型'参数表示'ABD.Contracts.Model.CspUsageDetailImportDto'不能用于'ABD.Persistence.CspUsageDetails_Live'类型的委托参数。

我的AutoMapper绑定方法如下

    public static IMapper GetMapper()
    {
        MapperConfiguration config = new MapperConfiguration(cfg =>
        {
            cfg.AllowNullCollections = true;

            . . . 
            cfg.CreateMap<Persistence.CspUsageDetails_Live, CspUsageDetailImportDto>().ReverseMap();
            cfg.CreateMap<Expression<Func<CspUsageDetailImportDto, bool>>, Expression<Func<Persistence.CspUsageDetails_Live, bool>>>();

        });
        return config.CreateMapper();
    }

我的阅读器获取方法如下

    public List<CspUsageDetailImportDto> Get(Expression<Func<CspUsageDetailImportDto, bool>> expression)
    {            
        _logger.Info("Looking up Csp usage details from a given expression");
        var liveExpression = _mapper.Map<Expression<Func<CspUsageDetailImportDto, bool>>, Expression<Func<CspUsageDetails_Live, bool>>>(expression);
        var results = new List<CspUsageDetailImportDto>();


        // Lookup live data
        //var liveExpression = _mapper.Map<Expression<Func<CspUsageDetails_Live, bool>>>(expression);
        var liveEntities = _db.CspUsageDetails_Live.Where(liveExpression);
        if (liveEntities.Any())
        {
            var liveMapped = _mapper.Map<IEnumerable<CspUsageDetailImportDto>>(liveEntities);
            results.AddRange(liveMapped);
        }
    }

我花了过去一小时用谷歌搜索AutoMapper和表达式,我无处可去。我想知道任何人都可以解释我的问题。非常感谢您的回复。

0 个答案:

没有答案