c# - 如何映射 IEnumerable使用 Automapper 按 Id 属性分组的属性
问题描述
我有这些课程
public class StudentModel
{
public int StudentId { get; set; }
public string Name { get; set; }
public int SubjectId { get; set; }
public string SubjectLabel { get; set; }
public string SubjectCode { get; set; }
}
public class StudentDto
{
public int StudentId { get; set; }
public string Name { get; set; }
public IEnumerable<SubjectDto> Subjects { get; set; }
}
public class SubjectDto
{
public int SubjectId { get; set; }
public string SubjectLabel { get; set; }
public string SubjectCode { get; set; }
}
假设我返回了这些数据
StudentId Name SubjectId SubjectLabel SubjectCode
1 alex 1 physics 1 phys1
1 alex 2 english eng1
2 ryan 1 physics 1 phys1
2 ryan 3 algebra alg
我如何映射这个?
解决方案
像这样:
初始化映射规则
private static void InitializeAutomapper()
{
AutoMapper.Mapper.Initialize(config =>
{
config.CreateMap<IGrouping<int, StudentModel>, StudentDto>()
.ForMember(dest => dest.StudentId, opt => opt.MapFrom(src => src.Key))
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.First().Name))
.ForMember(dest => dest.Subjects, opt => opt.MapFrom(src => src.ToList()));
config.CreateMap<StudentModel, SubjectDto>();
});
}
分组依据和映射
var data = new List<StudentModel>
{
new StudentModel
{
StudentId = 1,
Name = "alex" ,
SubjectId =1 ,
SubjectLabel = "physics",
SubjectCode = "phys1"
},
new StudentModel
{
StudentId = 1,
Name = "alex" ,
SubjectId =2 ,
SubjectLabel = "english",
SubjectCode = "eng1"
},
new StudentModel
{
StudentId = 2,
Name = "ryan" ,
SubjectId = 1 ,
SubjectLabel = "physics",
SubjectCode = "phys1"
},
new StudentModel
{
StudentId = 2,
Name = "ryan" ,
SubjectId = 3 ,
SubjectLabel = "algebra",
SubjectCode = "alg"
}
};
List<IGrouping<int, StudentModel>> studentModels = data.GroupBy(s => s.StudentId).ToList();
var result = AutoMapper.Mapper.Map<List<IGrouping<int, StudentModel>>, List<StudentDto>>(studentModels);
推荐阅读
- flutter - Flutter - 使用 rxDart BehaviorSubject 和 Observable 进行全局状态管理
- bootstrap-4 - Bootstrap,如何在移动视图上重新排列输入标签?
- php - PHP 替换 URL 中的基本名称
- c++ - 一个函数中的 Setprecision 也适用于另一个函数。我似乎不知道为什么
- python - 如何提取熔化功能的列名?Python
- php - PDF 不在浏览器上查看,而是在 firefox 和 chrome 中下载
- python - python: how to sort lists with respect to capitalized letters and when first letter, case, and length, their order should remain the same
- php - 为什么我的 xammp 邮件功能不起作用?
- hyperledger-fabric - Hyperledger Fabric byfn.sh 脚本加载证书失败
- python - 无法从字典中打印月份值