如何使用AutoMapper映射集合中的第一个项目

时间:2011-11-21 23:37:01

标签: .net entity-framework automapper

我有一个与EF一起使用的对象,它有一个Bar的导航属性,它是一对多的,但应该是一对一的。无论如何,当我查询Foo时,我也想从Bar集合中获取第一个也是唯一一个项目,并将这些项目映射到一个扁平的Biz Dto,我将如何去做?

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

谢谢你, 斯蒂芬

2 个答案:

答案 0 :(得分:7)

在映射时使用FirstOrDefault()集合上的Bar

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

答案 1 :(得分: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,以便在没有相关Bars

的情况下没有异常 我应该这样做......

HTH