2011-11-21 12 views
5

Tengo un objeto Foo gen'd con EF, tiene una propiedad de navegación de Bar que es uno para muchos, pero debería haber sido uno a uno. De todos modos, cuando solicito un Foo I también me gusta obtener el primer y único elemento de la colección de Bar y asignarlos a un Biz Dto aplanado, ¿cómo voy a hacer eso?Cómo asignar el primer elemento de una colección con AutoMapper

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

Luego, en mi configuración de AutoMapper crearía un mapa que se veía como ????

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

Gracias, Stephen

+0

Las llamadas a CreateMap se ven correctas. ¿No están trabajando para ti? – PatrickSteele

+0

@PatrickSteele ¿Estás seguro de que esto está permitido? opt.MapFrom (src => src.Bar.FirstOrDefault ???) –

+0

Obviamente, debe limpiar la sintaxis, pero sí, puede definir una asignación personalizada por campo: opt.MapFrom (s => s.Bar.FirstOrDefault()); – PatrickSteele

Respuesta

6

Uso FirstOrDefault() en la colección Bar cuando asigna que:

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

Dado:

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

Solución:

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

donde FooCollection is IQueryable<Foo>

Uso FirstOrDefault de manera que no hay excepción en caso de que no hay barras relacionados

debería hacerlo ... Creo

HTH

+0

Actualicé mi pregunta con un ejemplo. –

Cuestiones relacionadas