2017-01-31 2 views
2

개체 목록의 int 속성을 List<int>에 매핑해야합니다.Automapper는 목록 <type>에서 목록으로 int 속성 값을 매핑합니다. <int>

public class Parent 
{ 
    ... 
    public List<Location> Locations { get; set; } 
} 

위치 클래스 : 매핑을위한

public class Location 
{ 
    public int LocationId { get; set; } 
    public string Name { get; set; } 
} 

대상 클래스 : 여기

public class Destination 
{ 
    ... 
    public List<int> Locations { get; set; } 
} 

내가 부모 클래스가 : 여기 내 클래스 구조는 모습입니다사이의 매핑을 수행하는 데 사용하려고하는 코드입니다.~ List<int> :

CreateMap<Parent, Destination>() 
.ForMember(d => d.Locations, o => o.MapFrom(s => s.Locations.Select(l => l.LocationId))) 

이것은 작동하지 않습니다. 다음과 같은 오류가 발생합니다.

AutoMapper.AutoMapperMappingException: Unable to create a map expression from Location.LocationId (System.Collections.Generic.IEnumerable`1[System.Int32]) to Destination.Locations (System.Collections.Generic.List`1[System.Int32])

내가 옳지 않다는 것을 알고 있습니까? 예외로

+1

선택 사항이 끝날 때 .ToList()를 시도 했습니까? – JamesT

+0

좋은 아이디어. 나는 이것을 시도하고 그것을 처리하는 것 같습니다. 감사! – DCATEK

답변

2

는 말한다 :

AutoMapper.AutoMapperMappingException: Unable to create a map expression from Location.LocationId (System.Collections.Generic.IEnumerable1[System.Int32]) to Destination.Locations (System.Collections.Generic.List1[System.Int32])

난 당신이 목록에 IEnumerable을지도하려고하기 때문에 이런 일이 발생 있다고 생각합니다. 다음에 ToList()을 맵 표현식에 추가하십시오. (권장하지 않음) 대상 클래스에 Locations 속성을 IEnumerable<int>으로 선언하십시오.

+1

JamesT가 위의 의견에서 제안한 것입니다. 이 문제가 해결되었습니다. 감사! – DCATEK

+0

Chris Pickford가 제안한대로 Int에 대한 매핑을 추가해야한다는 것을 알았습니다. 플러스 .ToList() 내 문제를 해결. – DCATEK

-1

당신은 당신을 위해 나머지를 돌봐 Location 사이 int지도하기 위해 AutoMapper 구성을 변경해야합니다

cfg.CreateMap<Location, int>().ConvertUsing(source => source.LocationId); 
cfg.CreateMap<Parent, Destination>().ForMember(dest => dest.Locations, opts => opts.MapFrom(src => src.Locations)); 

예를 작업을위한 this Gist를 참조하십시오.

+0

@downvoter -이 답변이 잘못되었거나 개선 될 수있는 방법을 설명하는주의 사항? –

+0

투표 결과가 확실하지 않은 이유를 알고 계십니다. 정답을 얻으려면 첫 번째 코드 줄을 사용해야했습니다. – DCATEK