这是获取其描述属性的枚举扩展方法。
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;
}
这是源对象:
public class Account {
public int AccountId {get;set;}
public int AccountStatusId {get;set;}
}
这是枚举:
public enum AccountStatus {
[Description("N/A")]
None,
[Description("OPEN")]
Open,
[Description("CLOSED")]
Closed,
[Description("BAD CREDIT")
Problem
}
这是目标对象:
public class GetAccountResponse {
public int AccountId {get;set;}
public string Status {get;set;}
}
这是我尝试映射(使用最新的非静态自动映射器版本)。请记住,这是在 EF 可查询投影期间。
_config = new MapperConfiguration(cfg => cfg.CreateMap<Account, GetAccountsResponse>()
.ForMember(dest => dest.Status,
opts => opts.MapFrom(src => ((AccountStatus) src.AccountStatusId).GetDescription())));
这是查询是的投影IQueryable<Account>
:
query.ProjectToList<GetAccountResponse>(_config);
这是我得到的例外:
无法将此解析为可查询表达式