C#学习相关系列之Linq常用方法---排序(一)
一、构建数据
public class Student_1
{
public int ID { get; set; }
public string Name { get; set; }
public int Chinese { get; set; }
public int Math { get; set; }
public int English { get; set; }
public override string ToString()
{
return string.Format("ID:{0},Name:{1},Chinese:{2},Math:{3},English:{4}", ID, Name, Chinese, Math, English);
}
}
构建一个student的数据类型,其中包括ID、name等属性。在该类内对tostring()方法进行了重写,通过tostring()可以对类内数据进行输出。
static void Main(string[] args)
{
List<Student_1> stuList = new List<Student_1>()
{
new Student_1(){ID=1,Name="John",Chinese=92,Math=88,English=92},
new Student_1(){ID=2,Name="Mary",Chinese=87,Math=94,English=82},
new Student_1(){ID=3,Name="KangKang",Chinese=89,Math=91,English=96},
new Student_1(){ID=4,Name="Maria",Chinese=88,Math=65,English=94},
new Student_1(){ID=5,Name="Ben",Chinese=70,Math=91,English=82},
};
//未排序时
foreach (var item in stuList)
{
Console.WriteLine(item.ToString());
}
Console.Read();
}
未排序时的输出结果为:
二、sort排序方法
//根据Chinese进行排序
//第一种方法
stuList.Sort((s1, s2) =>s1.Chinese.CompareTo(s2.Chinese));//前一个比后一个不交换,反之则交换,正序
stuList.Sort((s1, s2) => s2.Chinese.CompareTo(s1.Chinese));//前一个比后一个不交换,反之则交换,逆序
//第二种方法
stuList.Sort((s1, s2) =>
{
if (s1.Chinese > s2.Chinese)
{
return 1;
}
else
{
return 0;
}
}); //含义也为如果s1>s2则交换,反之不交换 正序
关于compareto的用法:
var m=a.compare(b)
//a与b进行比较,如果a>b 则m=1;
a<b 则m=-1;
a=b 则m=0;
三、orderby排序
//orderby第一种排序方法 lambda
var s1 = stuList.OrderBy(p => p.Chinese).ToList();
//第二种方法语法
var s1 = from s in stuList
orderby s.Chinese ascending
select s;
//其中ascending为默认升序,deascending为降序
根据多个内容综合排序:
要求先根据数学成绩进行排序,在根据语文进行排序,都是升序
//第一种方法
var s1 = stuList.OrderBy(p => p.Math).ThenBy(p=>p.Chinese).ToList();
//orderby后面可以无限跟Thenby对排序后的数据再进行排序
//第二种方法linq语法
var s1 = from s in stuList
orderby s.Math, s.Chinese ascending
select s;
orderby 后面跟两个属性,第一个s.math,先根据他进行排序,再根据s.chinese进行排序
参考文献:
C#中sort排序相关用法介绍_c# sort-CSDN博客
C#系 常用的LinQ查询表达式之orderby_yy763496668的博客-CSDN博客