首页 > 解决方案 > 无法将一个类的列表集合映射到另一个类模型

问题描述

我创建了一个映射器类,将我的事件模型映射到我的 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


标签: c#

解决方案


您还需要为数据对象创建映射。

像这样的东西:

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

推荐阅读