我有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 []'参数名称:属性
答案 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