从上下文手动映射列表

Map list manually from context

最初我为此使用了 automapper,但它似乎更难实现它。

基本上,我只想 return 一个空列表而不是空值。我可以在项目层面做到这一点,但不能在队友层面做到这一点。 API 不能 return 为 null,因为使用它的 UI 会出错。

我的实施示例如下:

Projects = !Util.IsNullOrEmpty(x.Projects) ? x.Projects : new List<ProjectsDto>(),

如果有人可以指导我如何通过 null/empty 检查手动映射它,我将不胜感激。 如果您还可以提供使用自动映射器的示例,那也将非常有帮助。

public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }        

    public List<ProjectsDto> Projects { get; set; }
}

public class ProjectsDto
{
    public string Status { get; set; }
      
    public List<TeammatesDto> Teammates { get; set; }
}

public class TeammatesDto
{
    public string TeammateName { get; set; }
    public string PreviousProject { get; set; }
}

//通过Id获取

var employee = await _context.Employees
            .Where(x => x.id.Equals(request.Id)
            .FirstOrDefaultAsync(cancellationToken);

//地图员工

 EmployeeDto ret = new EmployeeDto()
 {
    Id = employee.id,
    Name = employee.Name,
    Projects = null //TODO: map manually
 }

//获取所有员工

var employees = await _context.Employees.AsNoTracking()
               .ToListAsync(cancellationToken);

//地图在这里

 IList<EmployeeDto> list = new List<EmployeeDto>();
 foreach (var x in employees)
        {
            EmployeeDto dto = new EmployeeDto()
            {
                Id = x.id,
                Name = x.Name,
                Projects = null //TODO: map manually
            };
            list.Add(dto);
        }
return list;

不具体化完整实体,而是执行以下操作:

var query = _context.Employees
  .Select(e = new EmployeeDto
     {
        Id = e.id,
        Name = e.Name,
        Projects = e.Projects.Select(p => new ProjectDto
          {
             Status = p.Status,
             Templates = p.Templates.Select(t => new TemplateDto
                {
                    TeammateName = t.TeammateName,
                    PreviousProject = t.PreviousProject 
                }).ToList()
           }).ToList()
      }
  );

var result = await query.ToListAsync();