我有一个简单的数据阅读器类来从我的数据库中读取“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,但我一无所获。我想知道任何人都可以对我的问题有所了解。非常感谢您的回复。