如何使用C# LINQ将数据库记录转换为含嵌套列表的test类
解决方法
你可以通过在Select中对分组后的元素逐一映射为StudentGrade对象,再转换为List<StudentGrade>来填充StudentGrades属性。另外,分组后的IGrouping<TKey, TElement>自带Key属性,直接用它获取分组的学生ID比调用FirstOrDefault更简洁高效。
完整代码示例:
var allResult = _getAllClass.FindAll(); var result = allResult.GroupBy(x => x.idStudent) .Select(group => new test { idStudent = group.Key, StudentGrades = group.Select(item => new StudentGrade { className = item.className, startTime = item.startTime, endTime = item.EndTime // 注意数据库字段是EndTime,类属性是endTime,需保证大小写匹配 }).ToList() }).ToList();
核心逻辑说明:
- 分组:
GroupBy(x => x.idStudent)将原始课程记录按学生ID分组,每个分组对应一个学生的所有课程。 - 映射学生ID:
group.Key直接获取当前分组的学生ID,无需再从分组元素中查询。 - 构建课程列表:通过
group.Select(...)遍历分组内的每一条课程记录,将字段值赋值给StudentGrade的对应属性,最后用ToList()转换为列表类型,匹配test类的StudentGrades属性。
命名规范提示:
按照C#编码规范,类名建议使用大驼峰命名(如Test替代test),属性名也建议统一为大驼峰风格(如IdStudent替代idStudent),提升代码可读性和规范性。
内容的提问来源于stack exchange,提问作者Lucas Renatto
相关产品推荐
相关产品推荐

