C# 在NET core中以有效的方式将一种数据类型的数组转换为另一种数据类型的数组?

C# 在NET core中以有效的方式将一种数据类型的数组转换为另一种数据类型的数组?,c#,arrays,list,.net-core,C#,Arrays,List,.net Core,我有一个数据库实体数组,需要将其转换为不同的类,以便用作REST请求结果: DatabaseDTO[] arrayFromDb = _repo.GetAllData(); OutgoinDTO[] = convertFromDatabaseDTO (arrayFromDb); 最有效的方法是什么(我假设OutgoingDTO有一个接受DatabaseDTO的构造函数)您可以使用LINQ从另一个对象映射对象,如下所示: var outgoinDTO = arrayFromDb.Select(x

我有一个数据库实体数组,需要将其转换为不同的类,以便用作REST请求结果:

DatabaseDTO[] arrayFromDb = _repo.GetAllData();
OutgoinDTO[] = convertFromDatabaseDTO (arrayFromDb);

最有效的方法是什么(我假设
OutgoingDTO
有一个接受DatabaseDTO的构造函数)

您可以使用LINQ从另一个对象映射对象,如下所示:

var outgoinDTO = arrayFromDb.Select(x => new OutgoinDTO() {
  outgoing_param1 = arrayFromDb.param1,
  outgoing_param2 = arrayFromDb.param2,
  outgoing_param3 = calcSum(arrayFromDb.param2, arrayFromDb.param3),
  ..
  outgoing_paramn = arrayFromDb.paramn
});

calcSum(int a, int b) {
  return a + b;
}
因此,您可以从DbClass计算Dto参数的一些结果。 如果两个类都有相同的参数(DbClass和DtoClass),那么您可以使用AutoMapper,@Adem Aygun在下面说了您可以如何使用AutoMapper

Mapper.Map(orderDtos,orders);
这里呢

对于不同的:

Mapper.CreateMap()
.ForMember(dest=>dest.FullName,opt=>opt.MapFrom(src=>src.Name));

考虑到您正在阵列之间转换,您可能会这样做吗?这可能是最有效的。定义“有效”;编码工作?内存使用情况?运行时间?依赖树?代码行?分配?这些都是相互竞争的因素:你不能说“全部”,为什么不创建一个具有所需大小的新数组并循环呢?这就是我所做的。您是否有特定的性能问题?例如,转换构造函数本身是将这两种类型绑定在一起的额外复杂性。为什么不使用单独的转换方法?还是汽车制造商?您在寻找什么?一种方法是不要首先构建“错误”类型的数组。如果你能在运行中转换它们,你会节省大量的内存。查看您的存储库是否可以重写,其中返回的是
IEnumerable
,而不是数组;OutgoinDTO[]=Array.ConvertAll(arrayFromDb,x=>newoutgoindto(x))仅当两个类中几乎都存在参数时才使用automapper。如果需要执行一些函数来计算参数结果,最好使用linq
Mapper.Map<List<OrderDTO>,List<Order>>(orderDtos, orders);
    Mapper.CreateMap<Employee, EmployeeDto>()
   .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name));