2011-11-21 99 views
5

我有一個使用EF創建對象Foo,它有一個導航屬性Bar,它是一對多的,但應該是一對一的。無論如何,當我查詢Foo時,我還想從Bar集合中獲取第一個也是唯一的一個項目,並將這些項目映射到Biz Dto,我將如何去做這件事?如何使用AutoMapper映射集合中的第一個項目

 var result = (from c in ctx.Foo 
        where c.Bar.Any(cs => cs.LOGINNAME == username && cs.PASSWORD == password) 
     select c).First(); 

然後在我的AutoMapper配置中,我會創建一個看起來像?

 Mapper.CreateMap<Foo, Biz>() 
      .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.CLIENTID)) 
      .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Bar.FirstOrDefault???)) 

謝謝 斯蒂芬

+0

你的CreateMap調用看起來正確。他們不適合你嗎? – PatrickSteele

+0

@PatrickSteele你確定這是允許的嗎? opt.MapFrom(src => src.Bar.FirstOrDefault ???) –

+0

顯然,您需要清理語法,但是,您可以在每個字段的基礎上定義自定義映射:opt.MapFrom (s => s.Bar.FirstOrDefault()); – PatrickSteele

回答

6

使用FirstOrDefault()Bar集合時,你映射它:

opt.MapFrom(src => src.Bar.FirstOrDefault()) 
0

考慮:

public class Foo{ 
public ICollection<Bar> Bars { get; set; } 
} 

解決方案:

var result = from item in FooCollection 
      select new { FirstBar = item.Bars.FirstOrDefault() }; 

其中FooCollection is IQueryable<Foo>

使用FirstOrDefault使存在的情況下也不例外有沒有相關的酒吧

應該這樣做,我認爲......

HTH

+0

用一個例子更新我的問題。 –