C# 从上下文手动映射列表

C# 从上下文手动映射列表,c#,entity-framework,linq,linq-to-sql,automapper,C#,Entity Framework,Linq,Linq To Sql,Automapper,最初我使用automapper来实现这一点,但它对我来说似乎更难实现 基本上,我只想返回一个空列表,而不是空值。我可以在项目层面上做到这一点,但不能在队友层面上做到。API不能返回null,因为使用它的UI将出现错误 下面是我的实现示例: Projects = !Util.IsNullOrEmpty(x.Projects) ? x.Projects : new List<ProjectsDto>(), //地图雇员 EmployeeDto ret = new EmployeeDt

最初我使用automapper来实现这一点,但它对我来说似乎更难实现

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

下面是我的实现示例:

Projects = !Util.IsNullOrEmpty(x.Projects) ? x.Projects : new List<ProjectsDto>(),
//地图雇员

 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;
IList list=new list();
foreach(员工中的风险值x)
{
EmployeeDto=新EmployeeDto()
{
Id=x.Id,
Name=x.Name,
Projects=null//TODO:手动映射
};
列表。添加(dto);
}
退货清单;

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

var query=\u context.Employees
.选择(e=新员工待办事项
{
Id=e.Id,
Name=e.Name,
Projects=e.Projects.选择(p=>newprojectdto
{
状态=p.状态,
Templates=p.Templates.选择(t=>newtemplatedto
{
队友姓名=t.TeameName,
PreviousProject=t.PreviousProject
})托利斯先生()
})托利斯先生()
}
);
var result=wait query.ToListAsync();

请参阅。但更合适的是。这是
ProjectTo
自动完成的。是的,但人们可以学习:)显然手动解决方案很痛苦。这无法扩展。对于除普通应用程序以外的任何应用程序,您都需要一个工具来帮助。不一定是我。但是所有这些重复都是无意识的。AM使用表达式树,而不是反射。检查。配置验证将自动捕获该信息。为不同的用例重用相同的DTO是一种反模式。很少有工具是罪魁祸首,而是你如何使用它。当然,使用AM可以获得出色的性能,但必须正确使用它。
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;