C# 使用Linq对组内的学生进行排序,然后重新排列组顺序
我想-C# 使用Linq对组内的学生进行排序,然后重新排列组顺序,c#,linq,C#,Linq,我想- 在每组内按升序对学生进行排序(例如:第一组中的杰克、约翰和彼得等) 按第一项按升序排列所有已排序的组(例如:组3、2和1) 收藏 public class StudentInfo { public string Student { get; set; } public string University { get; set; } public int GroupID { get; set; } public bool IsQualified {get; set;}
- 在每组内按升序对学生进行排序(例如:第一组中的杰克、约翰和彼得等)
- 按第一项按升序排列所有已排序的组(例如:组3、2和1)
public class StudentInfo
{
public string Student { get; set; }
public string University { get; set; }
public int GroupID { get; set; }
public bool IsQualified {get; set;}
}
List<StudentInfo> studentsList = new List<StudentInfo>();
StudentsList.Add( new StudentInfo { Student="John", University="ABC", GroupID = 1, IsQualified=False});
StudentsList.Add( new StudentInfo { Student="Jack", University="DEF", GroupID = 1, IsQualified=False} );
StudentsList.Add( new StudentInfo { Student="Peter", University="GHI", GroupID = 1, IsQualified=False} );
StudentsList.Add( new StudentInfo { Student="Olivia", University="ABC", GroupID = 2, IsQualified=False} );
StudentsList.Add( new StudentInfo { Student="Donald", University="JKL", GroupID = 2, IsQualified=False} );
StudentsList.Add( new StudentInfo { Student="Adam", University="GHI", GroupID = 3, IsQualified=False} );
StudentsList.Add( new StudentInfo { Student="Jacob", University="ABC", GroupID = 3, IsQualified=False} );
伪代码
var results = studentsList
.GroupBy(x => x.GroupID)
.SelectMany(g => g.OrderBy(x => x.Student)).ToList();
除此之外,我不知道该写些什么。请帮助我。因此Linq查询已经为您排序了数据,但现在您需要显示它。我已经测试过了,它显示了您的预期输出。代码如下:
static void Main(string[] args)
{
List<StudentInfo> studentsList = new List<StudentInfo>();
studentsList.Add(new StudentInfo { Student = "John", University = "ABC", GroupID = 1, IsQualified = false });
studentsList.Add(new StudentInfo { Student = "Jack", University = "DEF", GroupID = 1, IsQualified = false });
studentsList.Add(new StudentInfo { Student = "Peter", University = "GHI", GroupID = 1, IsQualified = false });
studentsList.Add(new StudentInfo { Student = "Olivia", University = "ABC", GroupID = 2, IsQualified = false });
studentsList.Add(new StudentInfo { Student = "Donald", University = "JKL", GroupID = 2, IsQualified = false });
studentsList.Add(new StudentInfo { Student = "Adam", University = "GHI", GroupID = 3, IsQualified = false });
studentsList.Add(new StudentInfo { Student = "Jacob", University = "ABC", GroupID = 3, IsQualified = false });
var results = studentsList.OrderBy(x => x.Student)
.GroupBy(x => x.GroupID);
foreach (var group in results)
{
Console.WriteLine(group.Key);
foreach (var student in group)
{
Console.WriteLine(student.Student);
}
Console.WriteLine(Environment.NewLine);
}
}
public class StudentInfo
{
public string Student { get; set; }
public string University { get; set; }
public int GroupID { get; set; }
public bool IsQualified { get; set; }
}
static void Main(字符串[]args)
{
List studentsList=新列表();
添加(newstudentinfo{Student=“John”,University=“ABC”,GroupID=1,IsQualified=false});
添加(newstudentinfo{Student=“Jack”,University=“DEF”,GroupID=1,IsQualified=false});
添加(新的StudentInfo{Student=“Peter”,University=“GHI”,GroupID=1,IsQualified=false});
添加(新的StudentInfo{Student=“Olivia”,University=“ABC”,GroupID=2,IsQualified=false});
添加(newstudentinfo{Student=“Donald”,University=“JKL”,GroupID=2,IsQualified=false});
添加(新的StudentInfo{Student=“Adam”,University=“GHI”,GroupID=3,IsQualified=false});
添加(newstudentinfo{Student=“Jacob”,University=“ABC”,GroupID=3,IsQualified=false});
var results=studentsList.OrderBy(x=>x.Student)
.GroupBy(x=>x.GroupID);
foreach(结果中的var组)
{
控制台写入线(组键);
foreach(学生分组)
{
Console.WriteLine(student.student);
}
Console.WriteLine(Environment.NewLine);
}
}
公共班级学生信息
{
公共字符串Student{get;set;}
公共字符串{get;set;}
public int GroupID{get;set;}
公共bool是限定的{get;set;}
}
根据Krish评论更新:
按第一项按升序排列所有已排序的组
var results = StudentsList
.OrderBy(x => x.Student)
.GroupBy(x => x.GroupID)
.SelectMany(x => x.OrderBy(y => y.Student))
.ToList();
根据横滨评论更新
Group 3:
Adam
Jacob
Group 2:
Donald
Olivia
Group 1:
Jack
John
Peter
var results = StudentsList
.GroupBy(x => x.GroupID)
.OrderByDescending(x => x.Key)
.SelectMany(x => x.OrderBy(y => y.Student))
.ToList();
foreach (var item in results)
{
Console.WriteLine(item.GroupID + " : " + item.Student);
}
结果:
旧代码
var results = studentsList
.GroupBy(x => x.GroupID)
.SelectMany(g => g.OrderBy(x => x.Student)).ToList();
您可以按降序排列键
(groupId),并按升序排列每个组中的学生姓名,如以下代码所示:
var results = StudentsList
.GroupBy(x => x.GroupID)
.OrderByDescending(x => x.Key)
.Select(x => new { Group = "Group " + x.Key, Students = x.Select(y => y.Student).OrderBy(z => z).ToList() })
.ToList();
我希望这能帮到你。var-groupedStudents=studentsList.GroupBy(a=>a.GroupID,(key,Students)=>new
{
键=键,
StudentsList=Students.ToList()
}).OrderByDescending(a=>a.Key).ToList();
foreach(groupedStudents中的变量项)
{
Console.WriteLine(“组”+项.Key+“:”);
foreach(item.StudentsList.OrderBy中的var stdList(a=>a.Student))
{
Console.WriteLine(标准列表学生);
}
Console.WriteLine();
}
输出:
Group 3:
Adam
Jacob
Group 2:
Donald
Olivia
Group 1:
Jack
John
Peter
你错过了按名字排列学生的顺序吗?你想在每个小组中也排列学生的名字吗?不知道他们为什么要放弃投票。。除了基于给定问题的逻辑上的一个小缺陷外,您的查询是好的。根据子组的第一个元素排序。例如,如果交换2和3组ID,则应按组2,3的顺序显示,1@Sajid,是否可以更新原始集合而不是迭代?谢谢。你能检查我的更新吗?如果理解正确,你想第一次按组id排序,第二次按学生姓名排序吗?@Yokidoo,我在这里看到一条评论;),然后我添加循环,并在更新的代码结果不介意。。。我这边有个错误,你的代码没有问题。