c# - 无法将一个类的列表集合映射到另一个类模型
问题描述
我创建了一个映射器类,将我的事件模型映射到我的 EventEntity 模型,这些模型有一个列表属性(代码片段如下所示);
我遇到了这个C# - 无法将类型 List<Product> 隐式转换为 List<IProduct>
但是我在尝试将解决方案实施到我的项目中时遇到了困难。
//Event Model
public List<EventData> EventData { get; set; }
//Event Entity Model
public List<EventDataEntity> EventData { get; set; }
我的 Mapper 类(代码片段)
public class EventToEventEntityMapper : IMapper<Event, EventEntity>
{
public EventEntity Map(Event e)
{
var entity = new EventEntity
{
EventData = e.EventData.Select(Map).ToList() //Modified the code a per user comment
};
return entity;
}
}
//The Interface
public interface IMapper<TSource, TDestination>
{
TDestination Map(TSource entity);
}
我得到的错误
Severity Code Description Project File Line Suppression State
Error CS0411 The type arguments for method 'Enumerable.Select<TSource, TResult>(IEnumerable<TSource>, Func<TSource, int, TResult>)' cannot be inferred from the usage. Try specifying the type arguments explicitly
解决方案
您还需要为数据对象创建映射。
像这样的东西:
public EventEntity Map(Event e)
{
var entity = new EventEntity
{
EventData = e.EventData.Select(Map).ToList()
};
return entity;
}
public EventDataEntity Map(EventData e)
{
var entity = new EventDataEntity
{
//...
};
return entity;
}
更新
问题编辑后,方法需要稍微改变。
上面的答案要求Map
在同一个类中声明这两种方法,但是,当您创建一个通用Mapper
接口时,您需要执行以下操作:
public class EventToEventEntityMapper : IMapper<Event, EventEntity>
{
readonly IMapper<EventData, EventDataEntity> dataMapper;
public EventToEventEntityMapper(IMapper<EventData, EventDataEntity> dataMapper)
{
this.dataMapper = dataMapper;
}
public EventEntity Map(Event e)
{
var entity = new EventEntity
{
EventData = e.EventData.Select(dataMapper.Map).ToList()
};
return entity;
}
}
public class EventDataToEventDataEntityMapper : IMapper<EventData, EventDataEntity>
{
public EventDataEntity Map(EventData e)
{
var entity = new EventDataEntity
{
//...
};
return entity;
}
}
然后注入您的EventDataToEventDataEntityMapper
或手动传递给构造函数:
new EventToEventEntityMapper(new EventDataToEventDataEntityMapper());
推荐阅读
- json - 让 Log4j2 使用 json 作为 logformat
- android - 如何在 Android Studio 中为单元测试创建 MotionEvent?
- html - 弹性盒引导图像固定底部
- android-recyclerview - RecyclerView Item Swipe to Dismiss 有时会卡住
- mysql - 通过包含和排除标签来选择项目
- python - 访问列表数组中的第一个元素(Python)
- r - 在 R 中查找模块化包函数的帮助文件
- amazon-web-services - 自动扩展 Kubernetes 集群中的 AWS 节点
- sharepoint-2013 - SharePoint 2013 内容查询 Web 部分 4 筛选器
- java - 使用 Spring-Data 回收 MySql 表内存