我正在尝试将 EFCore 和 Automapper 实现到一个项目中,并且我在正确查询一些属性方面遇到了一些困难。下面,我将向您展示我的对象是什么样子的:
public class Request {
public int RequestID { get; set; }
...
...
...
public virtual ICollection<RequestApplication> RequestApplications { get; set; }
}
public class RequestApplication {
...
public virtual ICollection<Application> Application { get; set; }
}
public class Application {
public string Name { get; set; }
}
public class ManagedRequestsDTO {
public int RequestID { get; set; }
...
...
public string Systems { get; set; }
}
我正在尝试使用 AutoMapper,它是自定义映射来将我的属性映射到我的 DTO。我正在努力解决的一个属性是 Systems,它基本上是我的 Application.Name 的字符串连接。具有以下数据:
{
"RequestID": "5",
"RequestApplications": [
{
"Application": {
"Name": "Apple"
}
},
{
"Application": {
"Name": "Pear"
}
}
]
}
...我希望我的 DTO 对象将系统值存储为“Apple Pear”。现在有没有一种好的、简单的方法可以使用 AutoMapper 来做到这一点?我将以我现在拥有的 AutoMapper 为例:
CreateMap<Request, ManageRequestDTO>()
.ForMember(dest => dest.RequestID, opt => opt.MapFrom(src => src.RequestID);
这应该可以映射您提供的 JSON 示例:
CreateMap<Request, ManageRequestDTO>()
.ForMember(dest => dest.Systems, opt => opt.MapFrom(src =>
string.Join(' ', src.RequestApplications.Select(ra => ra.Application.Name));
请注意,
RequestApplication.Application
是模型类中的ICollection<Application>
,但与JSON示例不匹配,即:
# Not a collection!
"Application": {
"Name": "Apple"
}.