我有一个与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???))
谢谢你, 斯蒂芬
答案 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