【发布时间】:2017-01-03 00:27:00
【问题描述】:
假设我们有一个班级学生
class Student
{
public string Name { get; set; }
public string Gender { get; set; }
public List<string> Subjects { get; set; }
public static List<Student> GetAllStudetns()
{
List<Student> listStudents = new List<Student>
{
new Student
{
Name = "Tom",
Gender = "Male",
Subjects = new List<string> { "ASP.NET", "C#" }
},
new Student
{
Name = "Mike",
Gender = "Male",
Subjects = new List<string> { "ADO.NET", "C#", "AJAX" }
}
};
return listStudents;
}
}
我们想打印出每个学生的科目如下:
汤姆 - ASP.NET
汤姆 - C#
迈克 - ADO.NET
迈克 - C#
等
所以我找到的答案是
var result = Student.GetAllStudents().SelectMany(s => s.Subjects, (student, subject) => new { StudentName = student.Name, SubjectName = subject});
//then use foreach loop to retrieve...
我可以理解 => 的第二种用法,它只是投影到匿名类型。但我不明白第一部分
s => s.Subjects, (student, subject)
根据我的理解,=>左边是输入参数,在这种情况下是Student实例s,但=>右边应该是与Student实例s相关的返回类型,例如s.Name if我们想得到学生的名字,那么 (student, subject) 是什么意思?
【问题讨论】: