So ordnen Sie das erste Element in einer Sammlung mit AutoMapper zu

  • Ich habe ein Objekt, das mit EF erstellt wurde. Es hat eine Navigationseigenschaft von Bar, die eins zu vielen ist, aber eins zu eins hätte sein sollen. Wie auch immer, wenn ich nach einem Foo frage, möchte ich auch das Erste und einzige Element aus der Bar-Sammlung abrufen und diese einem abgeflachten Biz Dto zuordnen. Wie würde ich das tun?

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

    Dann würde ich in meiner AutoMapper-Konfiguration eine Map erstellen, die wie folgt aussah:

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

    Vielen Dank, Stephen

    22 November 2011
    Stephen Patten
2 answers
  • Verwenden Sie FirstOrDefault() für die Zuordnung Bar, wenn Sie es zuordnen:

     opt.MapFrom(src => src.Bar.FirstOrDefault())
     
    16 May 2013
    PatrickSteele
  • Gegeben:

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

    Lösung:

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

    wobei FooCollection is IQueryable<Foo>

    Verwenden Sie FirstOrDefault, damit es keine Ausnahme gibt, wenn keine zugehörigen Bars vorhanden sind

    sollte es meiner Meinung nach tun ...

    HTH

    22 November 2011
    Sunny