我正在编写一个简单的测试应用程序来演示如何对从EF上下文获取的列表进行排序。Linq在多个层上对IEnumerable进行排序
的 “目标” 是获取一个列表,通过Student.Name排序,然后Subject.Name
public class Student
{
public string Name {get;set;}
public List<ExamScore> ExamScores{get;set;}
}
public class Subject
{
public string Name{get;set;}
}
public class ExamScore
{
public Subject Subject{get;set;}
public int Score{get;set;}
}
第一级排序很简单:
var list = con.Students
.Include(e => e.ExamScores
.Select(s => s.Subjects))
.OrderBy(x => x.Name) //student.Name
.ToList();
但添加了一个新的水平令我困惑。
var list = con.Students
.Include(e => e.ExamScores
.Select(s => s.Subjects))
.OrderBy(x => x.Name) //student.Name
.ThenBy(y => y.ExamScores.???) //subject name???
.ToList();
输入
Student{"Jannie", ExamScore{ Subject{"Math"}, 90}}
Student{"Jannie", ExamScore{ Subject{"History"}, 70}}
Student{"Jannie", ExamScore{ Subject{"Science"}, 90}}
Student{"Koos", ExamScore{ Subject{"Xhosa"}, 83}}
Student{"Koos", ExamScore{ Subject{"Afrikaans"}, 74}}
Student{"Koos", ExamScore{ Subject{"English"}, 78}}
Student{"Pieter", ExamScore{ Subject{"Afrikaans"}, 65}}
Student{"Pieter", ExamScore{ Subject{"History"}, 80}}
Student{"Pieter", ExamScore{ Subject{"Math"}, 70}}
Student{"Sannie", ExamScore{ Subject{"Science"}, 60}}
Student{"Sannie", ExamScore{ Subject{"Math"}, 55}}
Student{"Sannie", ExamScore{ Subject{"Biology"}, 75}}
Student{"Magriet", ExamScore{ Subject{"Biology"}, 75}}
Student{"Magriet", ExamScore{ Subject{"English"}, 80}}
Student{"Magriet", ExamScore{ Subject{"Science"}, 90}}
预计输出
Student{"Jannie", ExamScore{ Subject{"History"}, 70}}
Student{"Jannie", ExamScore{ Subject{"Math"}, 90}}
Student{"Jannie", ExamScore{ Subject{"Science"}, 90}}
Student{"Koos", ExamScore{ Subject{"Afrikaans"}, 74}}
Student{"Koos", ExamScore{ Subject{"English"}, 78}}
Student{"Koos", ExamScore{ Subject{"Xhosa"}, 83}}
Student{"Magriet", ExamScore{ Subject{"Biology"}, 75}}
Student{"Magriet", ExamScore{ Subject{"English"}, 80}}
Student{"Magriet", ExamScore{ Subject{"Science"}, 90}}
Student{"Pieter", ExamScore{ Subject{"Afrikaans"}, 65}}
Student{"Pieter", ExamScore{ Subject{"History"}, 80}}
Student{"Pieter", ExamScore{ Subject{"Math"}, 70}}
Student{"Sannie", ExamScore{ Subject{"Biology"}, 75}}
Student{"Sannie", ExamScore{ Subject{"Math"}, 55}}
Student{"Sannie", ExamScore{ Subject{"Science"}, 60}}
你能举一个预期产出的例子吗? – bit
收集的学生*包含*科目的集合,所以不可能根据得分过滤学生收集 –
@bit已完成。 –