2011-02-23 3 views
0

다른 테이블에 대한 참조가있는 SQL 객체에 linq가 있습니다.지도에서 어떻게 컬렉션에서? 자동 매퍼

VM에 매핑하려고하지만 캡처 된 내용이 없습니다.

Mapper.CreateMap<A, G>(); 


// A is the linq to sql object 
A.MyList // this is a collection that I am trying to get the value out of A.MyList.Id 

// G is my View Model 
public class G 
{ 
    public string AMyListId {get; set;} 

} 


vm = Mapper.Map<List<A>, List<G>>(aListOfAFromDb); 

이것은 항상 null에서 되돌아옵니다. 나는 그것을 시도해야 수동으로해야 할 것이라고 생각했다.

Mapper.CreateMap<A, G>().ForMember(dest => dest.AMyList , opt => opt.MapFrom(src =>????));

그러나 목록에서 가져 오는 중이므로 선택할 속성을 제공하지 않습니다.

내가 "myList에"의 목록이없는 것을 깨달았다 편집

그것은 하나 하나에이어야한다. 나는 아직도 내가하고 싶은 일을하려고하는 데 문제가있다.

나는 가지고있다

Mapper.CreateMap();

A.Vip.UserId // again my linq object is A 

// G is my View Model 
public class G 
{ 
    public string IsVip {get; set;} 

} 


vm = Mapper.Map<List<A>, List<G>>(aListOfAFromDb); 

Mapper.CreateMap<A, G>().ForMember(dest => dest.IsVip, opt => opt.AddFormatter<VipFormatter>()); 


public class VipFormatter : IValueFormatter 
    { 
     public string FormatValue(ResolutionContext context) 
     { 
      bool value = (bool)context.SourceValue; 

      if (value) 
      { 
       return "Yes"; 
      } 


      return "No"; 

     } 
    } 

아직까지는 아무 것도 없습니다. 왜 그런지 모르겠습니다. 내 재산을 "AVipUserId"로 변경해야합니까? 아니면지도에 어떻게 든 말해 주시겠습니까?

+0

A가 목록을 포함하고 G가 목록의 항목에 대한 ID를 포함하면 A부터 List 으로 매핑해야합니까? 아니요. (즉, 하나의 "A"와 하나의 "G"로 많은 항목을 가짐) 어쩌면 당신이 어려운 일을 매핑하는 이유 일 수 있습니다. – Remus

+0

"G"에 "IsVip"속성이 있다면 어쩌면 bool 유형으로 만들어야합니다. 또한 여기에서 사용하는 논리에 대해 언급 할 수 있습니까? "A"가 "VIP"인지 어떻게 알 수 있습니까? A.Vip 객체가 null인지 여부에 따라 결정됩니까? – Remus

답변

3
난 당신의 코드에서 볼 수있는 것과

, 위 내 댓글에 더하여,이 하나 AutoMapper 필요하지 않습니다 : 사실

List<A> dbItems; 
IEnumerable<G> results = dbItems.Select(x => x.MyList.MyListID); 

각 A 객체에 대해 여러 개의 "G"객체를 만들므로 A를 G에 매핑 할 수 없습니다.

여기에 질문을 오해 한 경우 알려주십시오.

UPDATE :

그때 부울 속성을 사용하는 "G"로 변경하고 것이 다음을 수행하십시오

Mapper.CreateMap<A, G>().ForMember(dest => dest.IsVip, opt => opt.MapFrom(src => src.Vip == null)); 

를 또는 어떤 논리 당신이이 VIP인지 확인하기 위해 사용하거나 아니.

+0

내가 이것을 쓴 후에 나는 왜 내 관계가 일대일인지 이해가되지 않는다고 생각하기 시작했다. 실제로는 일대일이어야합니다. 나는 아직도 문제가있다. 내 게시물을 수정합니다. – chobo2

2

방법에 대해 :

List<G> items = // whatever 
var result = items.Select(g => Mapper.Map<G, A>(g)); 
관련 문제