从上下文手动映射列表
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();
最初我为此使用了 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();