0

I have a simple data reader class to read 'CspUsageDetails_Live' entities from my database. These are mapped to and from CspUsageDetailImportDto models using auto mapper.

The reader class has a method called Get that takes an expression Expression<Func<CspUsageDetailImportDto, bool>>. I need to map this to Expression<Func<CspUsageDetails_Live, bool>> before passing it to entity framework. All the code including mapping of the expression runs fine until I call if (liveEntities.Any()) Here I am getting an error 'ParameterExpression of type 'ABD.Contracts.Model.CspUsageDetailImportDto' cannot be used for delegate parameter of type 'ABD.Persistence.CspUsageDetails_Live'.

My AutoMapper bindings method is as follows

    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();
    }

My Reader Get method is as follows

    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);
        }
    }

I've spent the past hour googling AutoMapper and Expressions and I'm getting nowhere. I'm wondering can anyone shed any light on my issue. Many thanks for responses.

Kieran
  • 186
  • 2
  • 13
  • Did you see this post ? I think this works. [Link](http://stackoverflow.com/questions/7424501/automapper-for-funcs-between-selector-types/7425211#7425211) – Murat Gündeş Feb 27 '17 at 12:51
  • As the title says, I'm using latest version (ver 5) of Automapper, Some of the key api signatures in that article are no longer available. The article seems to be out of date. – Kieran Feb 27 '17 at 14:12
  • Did you find an answer to this? – Rogala May 05 '18 at 20:20

0 Answers0