我有一个简单的数据读取器类来从我的数据库中读取'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和表达式,我无处可去。我想知道任何人都可以解释我的问题。非常感谢您的回复。