我正在努力根据需要计算的值对列表进行排序。
在大学里,我有不同的系。每个系都有许多学习区,而这些学习区又有许多学生。
当前所有这些学习领域都列在一个大列表中,但是我想根据每个部门的学生总数对列表进行排序。
public class StudyAreasClass()
{
public string Name {get; set;}
public string Students {get; set;}
public string Department {get; set;}
}
在列表中,部门可能相同的四个StudyAreaClass项。因此,我需要计算系相同的学生总数。
然后,我需要对这个部门与大学中其他部门的价值进行比较。
棘手的部分是我没有固定的可比较值。所以我不知道我的名单上有哪些部门。所以我不能只说:
University
.OrderBy(s => s.Students)
.Where(c => c.Name == "NameOfADepartment")
.ToList();
我认为使用Linq对此类进行排序应该有一种更简单的方法,但是我不知道该怎么做。
有人能指出我正确的方向吗?
谢谢
答案 0 :(得分:1)
您可以使用linq查询执行此操作
static void Main()
{
List<StudyAreasClass> areas = new List<StudyAreasClass>();
areas.Add(new StudyAreasClass() { Name = "A", Students = 5, Department = "D1" });
areas.Add(new StudyAreasClass() { Name = "B", Students = 1, Department = "D1" });
areas.Add(new StudyAreasClass() { Name = "C", Students = 2, Department = "D2" });
areas.Add(new StudyAreasClass() { Name = "D", Students = 10, Department = "D3" });
var sortedList =
from area in areas
join sub in (from a in areas
group a by a.Department into g
select new
{
Department = g.Key,
StudentCount = g.Sum(x => x.Students)
}) on area.Department equals sub.Department
orderby sub.StudentCount, area.Students
group area by area.Department into g2
select g2;
foreach (var departmentList in sortedList)
{
Console.WriteLine(departmentList.Key);
foreach (var area in departmentList)
Console.WriteLine(area.Name);
}
//D2
//C
//D1
//B
//A
//D3
//D
}
基本上,您使用子查询来计算按部门分组的学生总数,然后加入原始列表。然后,您可以根据总数进行排序,然后得到结果。