К сожалению, References<GradesMap>(m => m.Grades);
не работает для массива Result.Это будет работать для индивидуального результата.У меня есть одно решение, которое переопределяет ToString()
метод Result
, чтобы сгладить оценки.Это может работать для вас, в зависимости от того, что вам нужно.
public class Result
{
public string Subject { get; set; }
public decimal? Marks { get; set; }
public override string ToString()
{
return $"{Subject} = {Marks}";
}
}
Внесите небольшое изменение в свой StudentResultExportMap.Вы можете установить 2-е число на .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
за каждый класс.
var records = new List<Student>
{
new Student{ Id = "1", Name = "First", Grades = new [] {
new Result { Subject = "Subject1", Marks = (decimal)2.5 } ,
new Result { Subject = "Subject2", Marks = (decimal)3.5 } }},
new Student{ Id = "2", Name = "Second", Grades = new [] {
new Result { Subject = "Subject1", Marks = (decimal)3.5 } ,
new Result { Subject = "Subject2", Marks = (decimal)4.0 } }}
};
using (var writer = new StreamWriter("path\\to\\StudentResults.csv"))
using (var csv = new CsvWriter(writer))
{
csv.Configuration.RegisterClassMap<StudentResultExportMap>();
csv.WriteRecords(records);
}