2011-02-23 69 views
0

我有一個LINQ到SQL對象,有一些其他表的引用如何MapFrom集合?自動映射器

我想映射它到一個虛擬機,但沒有任何獲取捕獲。

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映射到列表,否? (我的意思是,你有許多項目對一個「A」和一個項目對一個「G」)也許這就是爲什麼你很難映射的東西。 – Remus 2011-02-23 22:03:40

+0

如果你在「G」有一個屬性「IsVip」,也許你應該使它成爲一個bool類型。另外,你可以提一下你在這裏使用的邏輯嗎?如何認識到「A」是否是「VIP」?它是基於A.Vip對象是否爲空? – Remus 2011-02-23 22:41:56

回答

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 2011-02-23 22:20:35

2

如何:

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