C# 存在参考地图时导出到CSV时出错
我有一个sC# 存在参考地图时导出到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
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);
}
}