C# 存在参考地图时导出到CSV时出错

C# 存在参考地图时导出到CSV时出错,c#,export-to-csv,csvhelper,automap,C#,Export To Csv,Csvhelper,Automap,我有一个sStudent班级,每个学生记录都有一个结果列表。 我需要将这些结果导出到CSV,我正在使用 我使用参考地图来映射结果列表,但是当导出到CSV时,它会抛出错误 映射代码 public sealed class StudentResultExportMap : ClassMap<Student> { public StudentResultExportMap () { AutoMap(); References<Grade

我有一个s
Student
班级,每个学生记录都有一个
结果列表。
我需要将这些结果导出到CSV,我正在使用

我使用参考地图来映射结果列表,但是当导出到CSV时,它会抛出错误

映射代码

public sealed class StudentResultExportMap : ClassMap<Student>
{
    public StudentResultExportMap ()
    {
        AutoMap();
        References<GradesMap>(m => m.Grades);
    }
}

public sealed class GradesMap: ClassMap<Result>
{
    public GradesMap()
    {
        Map(m => m.Subject);
        Map(m => m.Marks);
    }
}
公共密封类StudentResultExportMap:ClassMap
{
公共StudentResultExportMap()
{
自动映射();
参考(m=>m级);
}
}
公共密封类等级映射:类映射
{
公共等级MAP()
{
Map(m=>m.Subject);
地图(m=>m.Marks);
}
}
错误

未为类型定义属性“System.String Subject” “{namespace}.GetStudentResults+Result[]”参数名称:属性


不幸的是
参考文献(m=>m.Grades)不适用于结果数组。它将为个人的结果而工作。我有一个解决方案,它覆盖了
Result
ToString()
方法,以使成绩平坦化。它可能适合你,取决于你需要什么

公共类结果
{
公共字符串主题{get;set;}
公共十进制标记{get;set;}
公共重写字符串ToString()
{
返回$“{Subject}={Marks}”;
}
}
对你的地图稍作修改。您可以在
.Index(2,7)
上设置第二个数字,以处理您认为学生可能拥有的最大分数

公共密封类StudentResultExportMap:ClassMap
{
公共StudentResultExportMap()
{
自动映射();
地图(m=>m.Grades)。名称(“Grades”)。索引(2,7);
}
}
然后,您将使用每个年级的
toString()
Result
获得
Id、Name、Grade1、Grade2、Grade3、Grade4、Grade5、Grade6

var记录=新列表
{
新学生{Id=“1”,Name=“First”,年级=新[]{
新结果{Subject=“Subject1”,标记=(十进制)2.5},
新结果{Subject=“Subject2”,标记=(十进制)3.5}},
新学生{Id=“2”,Name=“Second”,年级=新[]{
新结果{Subject=“Subject1”,标记=(十进制)3.5},
新结果{Subject=“Subject2”,标记=(十进制)4.0}
};
使用(var writer=newstreamwriter(“path\\to\\StudentResults.csv”))
使用(var csv=新csv编写器(编写器))
{
csv.Configuration.RegisterClassMap();
csv.书面记录(记录);
}
public sealed class StudentResultExportMap : ClassMap<Student>
{
    public StudentResultExportMap ()
    {
        AutoMap();
        References<GradesMap>(m => m.Grades);
    }
}

public sealed class GradesMap: ClassMap<Result>
{
    public GradesMap()
    {
        Map(m => m.Subject);
        Map(m => m.Marks);
    }
}