Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从其他源集合类型自动映射_C#_Asp.net Mvc_Automapper_Dto - Fatal编程技术网

C# 从其他源集合类型自动映射

C# 从其他源集合类型自动映射,c#,asp.net-mvc,automapper,dto,C#,Asp.net Mvc,Automapper,Dto,给定下面的类,我需要建立从Person到PersonDTO的映射。我遇到的问题是PersonDTO的地址字段映射没有发生 public class Address { public int Id { get; set; } public string Value { get; set; } } public class RegisteredAddresses { public int Id { get; set; } public List<Address

给定下面的类,我需要建立从PersonPersonDTO的映射。我遇到的问题是PersonDTO的地址字段映射没有发生

public class Address
{
    public int Id { get; set; }
    public string Value { get; set; }
}

public class RegisteredAddresses
{
    public int Id { get; set; }
    public List<Address> Addresses { get; set; }

    public RegisteredAddresses()
    {
        this.Addresses = new List<Address>(); 
    }
}

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<RegisteredAddresses> AddressGroups { get; set; }

    public Person()
    {
        this.AddressGroups = new List<RegisteredAddresses>();
    }
}

public class PersonDTO
{
    public string Name { get; set; }
    public List<Address> Addresses { get; set; }

    public PersonDTO()
    {
        this.Addresses = new List<Address>();
    }
}

class Program
{
    static void Main(string[] args)
    {
        RegisteredAddresses registeredAddresses1 = new RegisteredAddresses();
        RegisteredAddresses registeredAddresses2 = new RegisteredAddresses();
        Person person = new Person();

        registeredAddresses1.Addresses.Add(new Address { Id = 1, Value = "address 1" });
        registeredAddresses1.Addresses.Add(new Address { Id = 2, Value = "address 2" });
        registeredAddresses1.Addresses.Add(new Address { Id = 3, Value = "address 3" });
        registeredAddresses1.Addresses.Add(new Address { Id = 4, Value = "address 4" });
        registeredAddresses1.Addresses.Add(new Address { Id = 5, Value = "address 5" });

        registeredAddresses2.Addresses.Add(new Address { Id = 1, Value = "address A" });
        registeredAddresses2.Addresses.Add(new Address { Id = 2, Value = "address B" });
        registeredAddresses2.Addresses.Add(new Address { Id = 3, Value = "address C" });
        registeredAddresses2.Addresses.Add(new Address { Id = 4, Value = "address D" });
        registeredAddresses2.Addresses.Add(new Address { Id = 5, Value = "address E" });

        person.Name = "person 1";
        person.AddressGroups.Add(registeredAddresses1);
        person.AddressGroups.Add(registeredAddresses2);

        Mapper.CreateMap<Person, PersonDTO>();

        // after this line....
        var personDto = Mapper.Map<Person, PersonDTO>(person);

        // .... personDTO.Addresses.Count() is zero; where it should be 10

    }
}
公共类地址
{
公共int Id{get;set;}
公共字符串值{get;set;}
}
公共类注册地址
{
公共int Id{get;set;}
公共列表地址{get;set;}
公共注册地址()
{
this.Addresses=新列表();
}
}
公共阶层人士
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表地址组{get;set;}
公众人士()
{
this.AddressGroups=新列表();
}
}
公共类个人
{
公共字符串名称{get;set;}
公共列表地址{get;set;}
公众人物
{
this.Addresses=新列表();
}
}
班级计划
{
静态void Main(字符串[]参数)
{
RegisteredAddresses registeredAddresses1=新的RegisteredAddresses();
RegisteredAddresses registeredAddresses2=新的RegisteredAddresses();
Person=新人();
Add(新地址{Id=1,Value=“Address 1”});
registeredAddresses1.Addresses.Add(新地址{Id=2,Value=“Address 2”});
registeredAddresses1.Addresses.Add(新地址{Id=3,Value=“Address 3”});
registeredAddresses1.Addresses.Add(新地址{Id=4,Value=“Address 4”});
registeredAddresses1.Addresses.Add(新地址{Id=5,Value=“Address 5”});
registeredAddresses2.Addresses.Add(新地址{Id=1,Value=“地址A”});
Add(新地址{Id=2,Value=“Address B”});
registeredAddresses2.Addresses.Add(新地址{Id=3,Value=“Address C”});
Add(新地址{Id=4,Value=“Address D”});
registeredAddresses2.Addresses.Add(新地址{Id=5,Value=“Addresse”});
person.Name=“person 1”;
person.AddressGroups.Add(registeredAddresses1);
person.AddressGroups.Add(registeredAddresses2);
CreateMap();
//在这一行之后。。。。
var personDto=Mapper.Map(个人);
//..personDTO.Addresses.Count()为零;其中应为10
}
}

您需要告诉AutoMapper如何将
地址组中包含的地址映射到
PersonDTO
中的地址。比如:

Mapper.CreateMap<Person, PersonDTO>()
      .ForMember(pd => pd.Addresses,
                 opt => opt.ResolveUsing(p => p.AddressGroups
                                               .SelectMany(ra => ra.Addresses)
                                        )
                );
Mapper.CreateMap()
.FormMember(pd=>pd.地址,
opt=>opt.ResolveUsing(p=>p.AddressGroups
.SelectMany(ra=>ra.Addresses)
)
);