【发布时间】:2017-08-25 04:43:35
【问题描述】:
假设我有以下课程:
public class StudentTeacher
{
public Student Student {get; set;}
public Teacher Teacher {get; set;}
public int OverlappingClasses {get; set;}
}
现在,在我的代码中,我有一个对象列表。
List<StudentTeacher> studentTeacher = GetStudentTeachers();
现在,我需要选择所有属性作为属性而不是对象。
例如,我可以这样做:studentTeacher.Select(x=>x.Student),它会返回一个对象列表(IEnumerable)。
但是当我选择多个属性时,即 studentTeacher.Select(x=> new {x.Student, x.Teacher}).ToList() 返回类型是IEnumerable {Anonymous {Student, Teacher}}
如何,而不是这种复杂的匿名类型,我可以有一个只有属性的简单匿名类型。 (所以,它将是Anonymous{StudentID, StudentName, StudentLastName, TeacherID, TeahcerName, TeacherLastName, etc.})
一种方法是在 select 子句中明确指定所有属性,但在我的特定用例中,每个对象都有 >30 个属性,并且属性总数 >100。)
【问题讨论】:
-
可能有一种方法可以使用反射来做到这一点,我不知道。但是这两个类中是否有任何同名的属性?
-
您的意思是要将对象扁平化为单个匿名类型?所以 Student.Id 会变成 StudentId 等等?如果是这样,您打算如何处理引用循环?
-
为什么不创建 DTO 并使用 AutoMapper?