如何使用 Automapper 或 LINQ 将具有嵌套列表的一个对象映射到对象列表?
How to map one object with nested list to list of objects using Automapper or LINQ?
我有这样的模型:
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Exam
{
public int Id { get; set; }
public string Name { get; set; }
}
public class StudentExam
{
public int Id { get; set; }
public int StudentId { get; set; }
public string ExamId{ get; set; }
}
StudentExam 对于模型 Student 和 Exam 是 link table。从前端应用程序中,我收集了这个模型中的一些数据:
public class StudentExamModel
{
public int StudentId { get; set; }
public List<Exam> Exams { get; set; }
}
因此,在这个 StudentExamModel 中,我有例如 StudentId = 3,其中包含 3 个 ID 为 1、2 和 3 的考试列表(现在考试名称并不重要)。我可以使用 Automapper 将此 StudentExamModel 映射到 StudentExam,所以我在 StudentExam 中有 3 行,如下所示:
StudentId ExamId
3 1
3 2
3 3
?
这个配置文件怎么样?
public class MyMapping : Profile
{
public MyMapping()
{
CreateMap<StudentExamModel, IReadOnlyList<StudentExam>>()
.ConvertUsing(model => model.Exams
.Select(exam => new StudentExam { StudentId = exam.Id, ExamId = exam.Id.ToString() })
.ToList());
}
}
用法:
var config = new MapperConfiguration(conf => conf.AddProfile<MyMapping>());
var mapper = config.CreateMapper();
var source = new StudentExamModel
{
StudentId = 3,
Exams = new List<Exam>
{
new Exam { Id = 1 },
new Exam { Id = 2 },
new Exam { Id = 3 },
}
};
var dest = mapper.Map<IReadOnlyList<StudentExam>>(source);
foreach (var item in dest)
{
Console.WriteLine($"{item.StudentId} - {item.ExamId}");
}
这里是corresponding fiddle。而且,如果您已经提供了这样一个 fiddle,其中只缺少映射本身,那么帮助您就容易多了。 ;-)
我有这样的模型:
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Exam
{
public int Id { get; set; }
public string Name { get; set; }
}
public class StudentExam
{
public int Id { get; set; }
public int StudentId { get; set; }
public string ExamId{ get; set; }
}
StudentExam 对于模型 Student 和 Exam 是 link table。从前端应用程序中,我收集了这个模型中的一些数据:
public class StudentExamModel
{
public int StudentId { get; set; }
public List<Exam> Exams { get; set; }
}
因此,在这个 StudentExamModel 中,我有例如 StudentId = 3,其中包含 3 个 ID 为 1、2 和 3 的考试列表(现在考试名称并不重要)。我可以使用 Automapper 将此 StudentExamModel 映射到 StudentExam,所以我在 StudentExam 中有 3 行,如下所示:
StudentId ExamId
3 1
3 2
3 3
?
这个配置文件怎么样?
public class MyMapping : Profile
{
public MyMapping()
{
CreateMap<StudentExamModel, IReadOnlyList<StudentExam>>()
.ConvertUsing(model => model.Exams
.Select(exam => new StudentExam { StudentId = exam.Id, ExamId = exam.Id.ToString() })
.ToList());
}
}
用法:
var config = new MapperConfiguration(conf => conf.AddProfile<MyMapping>());
var mapper = config.CreateMapper();
var source = new StudentExamModel
{
StudentId = 3,
Exams = new List<Exam>
{
new Exam { Id = 1 },
new Exam { Id = 2 },
new Exam { Id = 3 },
}
};
var dest = mapper.Map<IReadOnlyList<StudentExam>>(source);
foreach (var item in dest)
{
Console.WriteLine($"{item.StudentId} - {item.ExamId}");
}
这里是corresponding fiddle。而且,如果您已经提供了这样一个 fiddle,其中只缺少映射本身,那么帮助您就容易多了。 ;-)