How to map two list properties using Automapper
Class RegisterNewPessoaCommand
public class RegisterNewPessoaCommand {
public RegisterNewPessoaCommand(PessoaNatureza pessoaNatureza,
PessoaFisica pessoaFisica,
PessoaJuridica pessoaJuridica,
PessoaGenerico pessoaGenerico, List<PessoaContato> pessoasContatos) {
PessoaNatureza = pessoaNatureza;
PessoaFisica = pessoaFisica;
PessoaJuridica = pessoaJuridica;
PessoaGenerico = pessoaGenerico;
PessoasContatos = pessoasContatos;
}
}
Person Classviewmodel
public class PessoaViewModel {
public List <PessoaDocumentoViewModel> PessoasDocumentosViewModel {
get;
set;
}
}
Class Personcontact
public class PessoaContato : Entity
{
public int ContatoTipoId { get; private set; }
public int PessoaId { get; private set; }
public string Contato { get; private set; }
public string Detalhes { get; private set; }
public bool ContatoPrincipal { get; private set; }
public virtual Pessoa Pessoa { get; private set; }
public virtual ContatoTipo ContatoTipo{ get; private set; }
protected PessoaContato() { }
public PessoaContato(int contatoTipoId, int pessoaId, string contato, string detalhes, bool contatoPrincipal)
{
ContatoTipoId = contatoTipoId;
PessoaId = pessoaId;
Contato = contato;
Detalhes = detalhes;
ContatoPrincipal = contatoPrincipal;
}
}
Class Personcontactviewmodel
public class PessoaContatoViewModel
{
[Key]
public int Id { get; set; }
public int PessoaId { get; set; }
[DisplayName("Tipo de Contato")]
[Required(ErrorMessage = "Escolha um Tipo de Contato")]
public int ContatoTipoId { get; set; }
[DisplayName("Tipo de Contato")]
public string ContatoTipoDescricao { get; set; }
[DisplayName("Tipos de Contato")]
public IEnumerable<SelectListItem> ContatosTipos { get; set; }
[DisplayName("Contato")]
[Required(ErrorMessage = "O campo Contato é obrigatório")]
[MaxLength(100, ErrorMessage = "O campo {0} deve ter no máximo {1} caracteres")]
public string Contato { get; set; }
[DisplayName("Detalhes")]
[MaxLength(150, ErrorMessage = "O campo {0} deve ter no máximo {1} caracteres")]
public string Detalhes { get; set; }
[DisplayName("Contato Principal")]
public bool ContatoPrincipal { get; set; }
}
I have the classes PessoaViewModel
and RegisterNewPessoaCommand
where I need to map the property PessoasDocumentosViewModel
to List<PessoaContato> pessoasContatos
, one is list of PessoaViewModel
and the other is list of PessoaContato
and both have the same fields.
The other properties are mapped and working. I need to Loop and load the fields from a List for another as the picture. Does anyone know how to help me?
CreateMap<PessoaViewModel, RegisterNewPessoaCommand>()
.ConstructUsing(p => new RegisterNewPessoaCommand(
p.PessoaNatureza,
(p.PessoaFisicaViewModel != null ? new Domain.Models.PessoaFisica(
p.PessoaFisicaViewModel.NomeCompleto,
p.PessoaFisicaViewModel.Apelido,
p.PessoaFisicaViewModel.DataNascimento,
p.PessoaFisicaViewModel.Sexo,
p.PessoaFisicaViewModel.EstadoCivil,
p.PessoaFisicaViewModel.PessoaFisicaOrigem) : null
),
(p.PessoaJuridicaViewModel != null ? new Domain.Models.PessoaJuridica(
p.PessoaJuridicaViewModel.RazaoSocial,
p.PessoaJuridicaViewModel.NomeFantasia,
p.PessoaJuridicaViewModel.DataAbertura,
p.PessoaJuridicaViewModel.RegimeTributario,
p.PessoaJuridicaViewModel.PessoaJuridicaOrigem) : null
),
(p.PessoaGenericoViewModel != null ? new Domain.Models.PessoaGenerico(
p.PessoaGenericoViewModel.PessoaTipo,
p.PessoaGenericoViewModel.CodigoInterno,
p.PessoaGenericoViewModel.PessoaFilialId) : null
),
new List<PessoaContato>() <========recebe as list de p.PessoasContatosViewModel
));
7
1 answers
Using AutoMapper:
Mapper.Initialize(cfg => cfg.CreateMap<PessoaContatoViewModel, PessoaContato>());
List<PessoaContato> contato = Mapper.Map<List<PessoaContatoViewModel>, List<PessoaContato>>(pessoaContatoViewModels);
Instead of mapping
vc can use ConvertAll
,
List<PessoaContato> contato = pessoaContatoViewModels.ConvertAll
( x => new PessoaContato (
x.ContatoTipoId,
x.PessoaId,
x.Contato,
x.Detalhes,
x.ContatoPrincipal
) { });
I made a small demonstration using your(edited) modules:
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
List<PessoaContatoViewModel> pessoaContatoViewModels = new List<PessoaContatoViewModel> {
new PessoaContatoViewModel() {
Contato = "contato a",
ContatoTipoId = 1,
ContatoPrincipal = true
},
new PessoaContatoViewModel() {
Contato = "contato b",
ContatoTipoId = 2,
ContatoPrincipal = true
}
};
List<PessoaContato> contato = pessoaContatoViewModels.ConvertAll
( x => new PessoaContato (
x.ContatoTipoId,
x.PessoaId,
x.Contato,
x.Detalhes,
x.ContatoPrincipal
) { });
foreach (var item in contato)
{
Console.WriteLine(item.Contato);
}
}
public class PessoaContatoViewModel
{
public int Id { get; set; }
public int PessoaId { get; set; }
public int ContatoTipoId { get; set; }
public string ContatoTipoDescricao { get; set; }
public string Contato { get; set; }
public string Detalhes { get; set; }
public bool ContatoPrincipal { get; set; }
}
public class PessoaContato
{
public int ContatoTipoId { get; private set; }
public int PessoaId { get; private set; }
public string Contato { get; private set; }
public string Detalhes { get; private set; }
public bool ContatoPrincipal { get; private set; }
protected PessoaContato() { }
public PessoaContato(int contatoTipoId, int pessoaId, string contato, string detalhes, bool contatoPrincipal)
{
ContatoTipoId = contatoTipoId;
PessoaId = pessoaId;
Contato = contato;
Detalhes = detalhes;
ContatoPrincipal = contatoPrincipal;
}
}
}
1
Author: HudsonPH, 2019-03-01 06:33:50