MapsterMapper / Mapster

A fast, fun and stimulating object to object Mapper
MIT License
4.32k stars 329 forks source link

object map to list? #638

Closed aierong closed 1 year ago

aierong commented 1 year ago

model:

public class Team
{
    public int Id
    {
        get; set;
    }
    public string Name
    {
        get; set;
    }
    public List<People> Members
    {
        get; set;
    }
}

public class People
{
    public int Id
    {
        get; set;
    }
    public string Name
    {
        get; set;
    }
}

public class TeamMember
{
    public int TeamId
    {
        get; set;
    }
    public string TeamName
    {
        get; set;
    }
    public int PeopleId
    {
        get; set;
    }
    public string PeopleName
    {
        get; set;
    }
}

data:

Team model = new Team()
{
    Id = 1 ,
    Name = "qq" ,
    Members = new List<People>()
    {
        new People (){  Id =111, Name="p1"  },
        new People (){  Id =222, Name="p2" },
        new People (){  Id =333, Name="p3" },
        new People (){  Id =444, Name="p4" },
        new People (){  Id =555, Name="p5" }
    }
};
Map Team to IEnumerable<TeamMember> ,How do I do this?
result: TeamId TeamName PeopleId PeopleName
1 qq 111 p1
1 qq 222 p2
DocSvartz commented 1 year ago

If Team => TeamMember but this

TypeAdapterConfig<People, TeamMember>
    .NewConfig()
    .Map(dest => dest.PeopleId, src => src.Id)
    .Map(dest=>dest.PeopleName,src=> src.Name);

TypeAdapterConfig<Team, TeamMember>
    .NewConfig()
    .Map(dest => dest.TeamId, src => src.Id)
    .Map(dest => dest.TeamName, src => src.Name);

var s = model.Members.Adapt<List<TeamMember>>();

List<TeamMember> _result = new List<TeamMember>(); //result this

foreach (var item in s)
{
    _result.Add(model.Adapt(item)) ;
}
aierong commented 1 year ago

i ok use Parameters

config.ForType<People , TeamMember>()
     .Map( dest => dest.PeopleId , "Id" )
     .Map( dest => dest.PeopleName , "Name" )
     .Map( dest => dest.TeamId , src => Convert.ToInt32( MapContext.Current.Parameters["id"] ) )
     .Map( dest => dest.TeamName , src => MapContext.Current.Parameters["name"].ToString() );
List<TeamMember> dto = this._mapper.From<List<People>>( model.Members )
                                .AddParameters( "id" , model.Id  )
                                .AddParameters( "name" ,  model.Name  )
                                .AdaptToType<List<TeamMember>>();

            if ( dto != null )
            {

            }
aierong commented 1 year ago

ok