2011-11-21 18 views
5

Mam obiekt Foo gen'd z EF, ma on własność nawigacji Bar, która jest jedną dla wielu, ale powinna być jedna do jednej. W każdym razie, kiedy pytam o Foo, lubię też zdobywać pierwszy i jedyny przedmiot z kolekcji Bar i mapować je do spłaszczonego Biz Dto, jak miałbym to zrobić?Jak zmapować pierwszy element w kolekcji za pomocą AutoMappera

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

Następnie w konfiguracji AutoMapper utworzyłem mapę wyglądającą jak ????

 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???)) 

Dziękuję Stephen

+0

Połączenia CreateMap wyglądają prawidłowo. Czy nie działają dla ciebie? – PatrickSteele

+0

@PatrickSteele Czy na pewno jest to dozwolone? opt.MapFrom (src => src.Bar.FirstOrDefault ???) –

+0

Oczywiście musisz wyczyścić składnię, ale tak, możesz zdefiniować niestandardowe mapowanie dla poszczególnych pól: opt.MapFrom (s => s.Bar.FirstOrDefault()); – PatrickSteele

Odpowiedz

6

Zastosowanie FirstOrDefault() sprawie zbierania Bar Przy mapowaniu go:

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

Dane:

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

Rozwiązanie:

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

gdzie FooCollection is IQueryable<Foo>

Użyj FirstOrDefault tak, że nie ma wyjątków w przypadku braku powiązanych Bary

powinien to zrobić myślę ...

HTH

+0

Zaktualizowałem moje pytanie na przykładzie. –

Powiązane problemy