Сопоставить экземпляр класса со списком другого класса с помощью Automapper - PullRequest
0 голосов
/ 15 октября 2019

Можно ли сопоставить AddToClientCommand с List<AddToClient>?

public class AddToClientCommand : IRequest<AddToClientResponse>
{
    public List<int> AccountIds { get; set; } 
    public int ClientId { get; set; }
}

public class AddToClient
{
    public int AccountId { get; set; }
    public int ClientId { get; set; }
}

для достижения следующего результата:

var command = new AddToClientCommand
{
    AccountIds = new List<int> { 1, 2 },
    ClientId = 42
};

var result = // somehow automap with Automapper

var expected = new List<AddToClient>
{
    new AddToClient { AccountId = 1, ClientId = 42 },
    new AddToClient { AccountId = 2, ClientId = 42 }
};

expected.Should().BeEquivalentTo(result);

Ответы [ 2 ]

1 голос
/ 16 октября 2019

AutoMapper: Насколько я понимаю, невозможно сопоставить AddToClientCommand с List<AddToClient>. потому что AotuMapper предоставляет 2 способа отображения, такие как:

Например: У нас есть 2 класса, таких как Employee и User

    public class Employee  
{  
    public int EmployeeId { get; set; }  
    public string EmployeeFName { get; set; }  
    public string EmployeeLName { get; set; }  
    public string Address { get; set; }  
    public string City { get; set; }  
    public string State { get; set; }  
    public string Zip { get; set; }  
    public DateTime? DateOfJoining { get; set; }    
}

public class User  
{  
    public int Userid { get; set; }  
    public string UserFName { get; set; }  
    public string UserLName { get; set; }  
    public string Address { get; set; }  
    public string City { get; set; }  
    public string State { get; set; }  
    public string Zip { get; set; }  
    public DateTime? DateOfJoining { get; set; }  

}  

Employee objEmployee = new Employee  
 {  
    EmployeeId = 1001,  
    EmployeeFName = "Manish",  
    EmployeeLName = "Kumar",  
    Address = "JAIPUR",  
    City = "JAIPUR",  
    State = "RAJASTHAN",  
    Zip = "302004",  
    DateOfJoining = DateTime.Now,  
 };  

// 1. Создает карту, и все поля копируются, если свойства одинаковы

Mapper.CreateMap<Employee, User>(); 

// 2. Если свойства различны, нам нужно сопоставить поля сотрудника с полями пользователя, как показано ниже.

 AutoMapper.Mapper.CreateMap<Employee, User>()  
 .ForMember(o => o.Userid, b => b.MapFrom(z => z.EmployeeId))  
 .ForMember(o => o.UserFName, b => b.MapFrom(z => z.EmployeeFName))  
 .ForMember(o => o.UserLName, b => b.MapFrom(z => z.EmployeeLName));  

 User objuser = Mapper.Map<Employee, User>(objEmployee);

// Но ваше требование будет выполнено через Linq Query ...

  AddToClientCommand addCommand = new AddToClientCommand
   {
       AccountIds = new List<int> { 1, 2 },
       ClientId = 42
   }; 

   List<AddToClient> addClientList = addCommand.AccountIds.Select(item => new AddToClient { AccountId = item, ClientId = addCommand.ClientId }).ToList();

Вывод: enter image description here

enter image description here

0 голосов
/ 15 октября 2019

Нет необходимости использовать AutoMapper здесь. Вы можете делать что хотите с помощью запроса Linq

var expected = command.AccountIds.Select(id => new AddToClient { AccountId = id, ClientId = command.ClientId }).ToList();
...