2011-11-21 42 views
5

Tôi có một đối tượng Foo gen'd với EF, nó có một tài sản chuyển hướng của Bar đó là một đến nhiều, nhưng nên có được một. Dù sao, khi tôi truy vấn cho một Foo tôi cũng muốn có được mục đầu tiên và duy nhất từ ​​bộ sưu tập Bar và lập bản đồ này cho một phẳng ra Biz Dto, làm thế nào tôi sẽ đi về làm điều đó?Làm thế nào để ánh xạ mục đầu tiên trong một bộ sưu tập với AutoMapper

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

Sau đó, trong Cấu hình AutoMapper tôi sẽ tạo bản đồ giống như ????

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

Cảm ơn bạn, Stephen

+0

Các cuộc gọi CreateMap của bạn trông chính xác. Họ không làm việc cho bạn? – PatrickSteele

+0

@PatrickSteele Bạn có chắc chắn điều này được cho phép không? opt.MapFrom (src => src.Bar.FirstOrDefault ???) –

+0

Rõ ràng, bạn cần dọn sạch cú pháp, nhưng có, bạn được phép xác định ánh xạ tùy chỉnh trên cơ sở từng trường: opt.MapFrom (s => s.Bar.FirstOrDefault()); – PatrickSteele

Trả lời

6

Sử dụng FirstOrDefault() vào bộ sưu tập Bar khi bạn ánh xạ nó:

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

Given:

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

Giải pháp:

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

nơi FooCollection is IQueryable<Foo>

Sử dụng FirstOrDefault để không có ngoại lệ trong trường hợp không có Bars liên quan

nên làm điều đó tôi nghĩ ...

HTH

+0

Đã cập nhật câu hỏi của tôi với một ví dụ. –

Các vấn đề liên quan