在C#中使用Automapper为多个子嵌套对象创建View

问题描述 投票:0回答:1

我正在尝试将 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);
c# linq automapper
1个回答
0
投票

这应该可以映射您提供的 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"
      }.
© www.soinside.com 2019 - 2024. All rights reserved.