2015-07-13 3 views
0

Используя Automapper, я хочу отобразить свойство, которое представляет собой List of type Employee с использованием string.Join() для создания строки с именами прав сотрудника с разделителями-запятыми. Вот классы я использую:Сопоставление свойства списка <T> Использование Automapper

public class MappedEmployee 
{ 
    public string Name { get; set; } 
    public string RightNames { get; set; } 
} 

public class Employee 
{ 
    public string Name { get; set; } 
    public List<Right> Rights { get; set; } 
} 

public class Right 
{ 
    public string Name { get; set; } 
} 

А вот код у меня есть:

Mapper.CreateMap<Employee, MappedEmployee>() 
    .ForMember(d => d.RightNames, o => o.MapFrom(s => s.Rights.SelectMany(r => string.Join(", ", r.Name)))); 

var employee = new Employee 
{ 
    Name = "Joe Schmoe", 
    Rights = new List<Right> 
    { 
     new Right { Name = "Admin" }, 
     new Right { Name = "User" }, 
    } 
}; 

var mappedEmployee = Mapper.Map<Employee, MappedEmployee>(employee); 

Однако, это он производит на следующие:

System.Linq.Enumerable+<SelectManyIterator>d__14`2[Employee.Right,System.Char] 

Что я могу сделать получить строку с разделителями-запятыми из прав Работника?

ответ

2

Попробуйте использовать ResolveUsing вместо и поставить string.Join перед выбором:

Mapper.CreateMap<Employee, MappedEmployee>() 
    .ForMember(d => d.RightNames, o => o.ResolveUsing(s => string.Join(", ",s.Rights.Select(r => r.Name)))); 
+0

Это приводит к тому же результату. – Halcyon

+0

@Halcyon Смотрите мое обновление. –

+0

Это работает сейчас. Спасибо за помощь! – Halcyon