Wie ordne ich mit AutoMapper während einer abfragbaren Projektion einen Int seiner Enum-Beschreibung zu?
Hier ist die Erweiterungsmethode enum, um das Attribut description abzurufen.
public static string GetDescription(this Enum enumeration)
{
if (enumeration == null)
throw new ArgumentNullException();
var value = enumeration.ToString();
var type = enumeration.GetType();
var descriptionAttribute =
(DescriptionAttribute[]) type.GetField(value).GetCustomAttributes(typeof (DescriptionAttribute), false);
return descriptionAttribute.Length > 0 ? descriptionAttribute[0].Description : value;
}
Hier ist das Quellobjekt:
public class Account {
public int AccountId {get;set;}
public int AccountStatusId {get;set;}
}
Hier ist die Aufzählung:
public enum AccountStatus {
[Description("N/A")]
None,
[Description("OPEN")]
Open,
[Description("CLOSED")]
Closed,
[Description("BAD CREDIT")
Problem
}
Hier ist das Zielobjekt:
public class GetAccountResponse {
public int AccountId {get;set;}
public string Status {get;set;}
}
Hier ist mein Versuch zuzuordnen (unter Verwendung der neuesten nicht statischen Automapper-Version). Denken Sie daran, dass dies während einer abfragbaren EF-Projektion geschieht.
_config = new MapperConfiguration(cfg => cfg.CreateMap<Account, GetAccountsResponse>()
.ForMember(dest => dest.Status,
opts => opts.MapFrom(src => ((AccountStatus) src.AccountStatusId).GetDescription())));
Hier ist die Projektion, in der die Abfrage ein @ iIQueryable<Account>
:
query.ProjectToList<GetAccountResponse>(_config);
Dies ist die Ausnahme, die ich bekomme:
Kann dies nicht in abfragbaren Ausdruck auflösen