Mit AutoMapper v6.1Mit Aufzählungen als Kriterien in AutoMapper CreateMap und Projektion
Ohne harten Code aufweisen, der anstelle der ENUM-Wert ((int)POStatusOptions.Ordered
), wie können Sie erreichen diese Karte mit Projektion:
CreateMap<WorkOrderDetail, WorkOrderDetailsListViewModel>(MemberList.Destination)
.ForMember(vm => vm.QtyOnPOs, opt => opt.MapFrom(entity =>
entity.Item.PODetails
.Where(pod => pod.POHeader.StatusId >= (int)POStatusOptions.Ordered)
.Sum(pod => pod.QtyOrdered)
)))
Meine Konfiguration für AutoMapper verwendet Profile. So habe ich
Meine Config Klasse:
public static class AutoMapperConfiguration
{
public static void Configure()
{
//see https://github.com/AutoMapper/AutoMapper/wiki/Configuration
//see https://github.com/AutoMapper/AutoMapper/wiki/Configuration-validation
Mapper.Initialize(am =>
{
am.AddProfile<AutoMapperViewModelProfile>();
am.AddProfile<AutoMapperViewModelProfileAdmin>();
});
//uncomment this during testing to get a list of all errors in the browser when you run any page in otis
Mapper.AssertConfigurationIsValid();
}
}
die in Application_Start()
wie genannt wird: AutoMapperConfiguration.Configure();
Mein Profil Klasse:
public class AutoMapperViewModelProfile : Profile
{
public AutoMapperViewModelProfile()
{
CreateMap<WorkOrderDetail, WorkOrderDetailsListViewModel>(MemberList.Destination)
.ForMember(vm => vm.QtyOnPOs, opt => opt.MapFrom(entity =>
entity.Item.PODetails
.Where(pod => pod.POHeader.StatusId >= (int)POStatusOptions.Ordered)
.Sum(pod => pod.QtyOrdered)
)))
}
Danke, aber ich kann das nicht funktionieren bekommen. (Siehe meine aktualisierte Frage für weitere Details zu meinem Setup/Config). Wenn ich versuche, was Sie vorschlagen, bekomme ich den Fehler "Verwendung von nicht zugewiesenen lokalen Variablen" für die 'poStatusOptions' Variable. Was ich verstehen kann, wenn Sie die Variable in dieser Klasse deklarieren, aber nicht explizit einen Wert in dieser Klasse zuweisen ... Wie würde der Compiler wissen, dass Sie diese Werte von einer anderen Klasse weitergeben? –
Ordnen Sie es einfach jedem Wert zu, ich glaube nicht, dass es eine Rolle spielt, AutoMapper wird es ersetzen – dbraillon