有参考地图时,导出到CSV时出错

时间:2019-03-21 23:39:10

标签: c# export-to-csv csvhelper automap

我有Student班,每个学生记录都有一个Results列表。 我需要将结果导出到 CSV ,并且我正在使用CsvHelper

public class Student
{
   public string Id { get; set; }
   public string Name { get; set; }
   public Result[] Grades { get; set; }
}

public class Result
{
   public string Subject { get; set; }
   public decimal? Marks { get; set; }
}

我正在使用参考地图来映射结果列表,但是在导出为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);
    }
}

错误

  

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

1 个答案:

答案 0 :(得分:1)

不幸的是,References<GradesMap>(m => m.Grades);对结果数组不起作用。这将为单个结果工作。我有一个解决方案,该解决方案覆盖了ToString()的{​​{1}}方法以平整成绩。根据您的需要,它可能对您有用。

Result

对StudentResultExportMap进行一些更改。您可以在public class Result { public string Subject { get; set; } public decimal? Marks { get; set; } public override string ToString() { return $"{Subject} = {Marks}"; } } 上设置第二个数字,以处理您认为学生可能拥有的最大分数。

.Index(2, 7)

然后,您将为每个年级获得public sealed class StudentResultExportMap : ClassMap<Student> { public StudentResultExportMap() { AutoMap(); Map(m => m.Grades).Name("Grade").Index(2, 7); } } ,其Id, Name, Grade1, Grade2, Grade3, Grade4, Grade5, Grade6值为toString()

Result