0

我有一个简单的数据阅读器类来从我的数据库中读取“CspUsageDetails_Live”实体。这些使用自动映射器映射到 CspUsageDetailImportDto 模型和从 CspUsageDetailImportDto 模型映射。

阅读器类有一个名为 Get 的方法,它接受一个表达式Expression<Func<CspUsageDetailImportDto, bool>>Expression<Func<CspUsageDetails_Live, bool>>在将其传递给实体框架之前,我需要将其映射到。包括表达式映射在内的所有代码都运行良好,直到我调用if (liveEntities.Any()) 这里我得到一个错误'ABD.Contracts.Model.CspUsageDetailImportDto'类型的ParameterExpression不能用于'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();
    }

我的 Reader Get 方法如下

    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 和 Expressions,但我一无所获。我想知道任何人都可以对我的问题有所了解。非常感谢您的回复。

4

0 回答 0