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.