Lambda 使用表达式和linq select映射重构
我的目标是以可伸缩的方式处理一些到DTO的映射,从而减少一些样板文件。我必须在这里使用Iqueryable,不能只调用.toList() 这件作品很好用。(还要注意的是,示例中显示了BusinessUnit的所有属性,不过我还有大约25个对象需要映射,其中一些是海量的) 及 必须有一种方法在这两种情况下重用此映射。我试着直接打分机。。例如: .Select(BusinessUnit.MapToMessage());但是,这不起作用,因为它无法将其转换为SQLLambda 使用表达式和linq select映射重构,lambda,linq-to-sql,refactoring,expression,Lambda,Linq To Sql,Refactoring,Expression,我的目标是以可伸缩的方式处理一些到DTO的映射,从而减少一些样板文件。我必须在这里使用Iqueryable,不能只调用.toList() 这件作品很好用。(还要注意的是,示例中显示了BusinessUnit的所有属性,不过我还有大约25个对象需要映射,其中一些是海量的) 及 必须有一种方法在这两种情况下重用此映射。我试着直接打分机。。例如: .Select(BusinessUnit.MapToMessage());但是,这不起作用,因为它无法将其转换为SQL 那么,我如何在只需构建一次映射的情况
那么,我如何在只需构建一次映射的情况下为这两个功能用例提供服务呢?有没有什么方法可以让我用泛型来大幅减少模板上的工作量 编译映射程序供客户端使用:
#class BusinessUnitMapper
public static Func<BusinessUnit, BusinessUnitDTO> BU2DTO = EntityToMessage.Compile();
public BusinessUnitDTO Map(BusinessUnit from)
{
BusinessUnitDTO result = null;
if (from != null)
{
result = BU2DTO(from);
}
return result;
}
public BusinessUnitDTO Map(BusinessUnit from)
{
BusinessUnitDTO result = null;
if (from != null)
{
result = new BusinessUnitDTO
{
Id = from.Id,
Name = from.Name,
Code = from.Code
};
}
return result;
}
public static BusinessUnitDTO MapToMessage(this BusinessUnit businessUnit)
{
BusinessUnitMapper mapper = new BusinessUnitMapper();
return mapper.Map(businessUnit);
}
#class BusinessUnitMapper
public static Func<BusinessUnit, BusinessUnitDTO> BU2DTO = EntityToMessage.Compile();
public BusinessUnitDTO Map(BusinessUnit from)
{
BusinessUnitDTO result = null;
if (from != null)
{
result = BU2DTO(from);
}
return result;
}
public BusinessUnitDTO Map(BusinessUnit from) => from != null ? BU2DTO(from) : default;