2012-05-30 3 views
0

아래 코드를 사용하여 컬렉션의 유형 그룹을 단일 컬렉션에 매핑 할 수 있습니다. 나는 하나 개의 모음으로 드라이버의 모든 세 가지 유형을 매핑 할 수 있어요 위의 솔루션을Automapper를 사용하여 여러 컬렉션을 단일 컬렉션에 매핑

AutoMapper.Mapper.CreateMap<Source, Destination>().ForMember(
       dest => dest.Drivers, 
       opt => opt.MapFrom(src => src.BikeDrivers.Concat(src.CarDrivers).Concat(src.TruckDrivers))); 

. 내 대상 개체 (드라이버)에는 드라이버 유형을 식별하는 데 도움이되는 DriverType이라는 속성이 있습니다. (BikeDriver/CarDriver/TruckDriver)

위의 코드에서 내가 추가 할 컬렉션을 기반으로 DriverType 속성을 설정하는 방법은 무엇입니까?

예에 대한

: 나는 CarDrivers 수집 항목 DriverType = BikeDriverfor BikeDrivers 컬렉션 항목에 대한 하드 코드

DriverType = CarDriver에 있습니다. 사전

답변

1

에서

덕분에 당신이 당신의 소스 객체에서이 지식을 가지고있는 DriverType 속성을 설정합니다. 나는 너의 큰 그림을 볼 수는 없지만, 이것은 표본으로 사용할 수있다.

using System; 
using System.Collections.Generic; 
using System.Collections.ObjectModel; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var s = new Source() 
         { 
          BikeDrivers = new List<BikeDriver>() {new BikeDriver()}, 
          CarDrivers = new List<CarDriver>() {new CarDriver()}, 
          TruckDrivers = new List<TruckDriver>() {new TruckDriver()}, 
         }; 

      var d = new Destination(); 


      AutoMapper.Mapper.CreateMap<Source, Destination>().ForMember(
       dest => dest.Drivers, 
       opt => opt.MapFrom(src => src.BikeDrivers.Concat<IDriver>(src.CarDrivers).Concat<IDriver>(src.TruckDrivers))); 

      var result = AutoMapper.Mapper.Map(s, d); 
     } 

     public class Driver : IDriver 
     { 
      public string DriverType { get; set; } 
     } 

     public class Destination 
     { 
      public IEnumerable<IDriver> Drivers { get; set; } 
     } 

     public class Source 
     { 
      public IEnumerable<BikeDriver> BikeDrivers { get; set; } 
      public IEnumerable<CarDriver> CarDrivers { get; set; } 
      public IEnumerable<TruckDriver> TruckDrivers { get; set; } 
     } 

     public interface IDriver 
     { 
      string DriverType { get; set; } 
     } 

     public class BikeDriver : IDriver 
     { 
      public string DriverType 
      { 
       get { return "BikeDriver"; } 
       set { throw new NotImplementedException(); } 
      } 
     } 
     public class CarDriver : IDriver 
     { 
      public string DriverType 
      { 
       get { return "CarDriver"; } 
       set { throw new NotImplementedException(); } 
      } 
     } 
     public class TruckDriver : IDriver 
     { 
      public string DriverType 
      { 
       get { return "TruckDriver"; } 
       set { throw new NotImplementedException(); } 
      } 
     } 
    } 
}