C#学习相关系列之Linq常用方法---排序(一)

简介: 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进行排序


相关文章
|
1月前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
1月前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
1月前
|
C#
C#学习相关系列之yield和return的区别
C#学习相关系列之yield和return的区别
|
1月前
|
C#
C#学习系列相关之多线程(二)----Thread类介绍
C#学习系列相关之多线程(二)----Thread类介绍
|
1月前
|
C#
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
|
1月前
|
存储 C# 索引
C#学习相关系列之数据类型类的定义(一)
C#学习相关系列之数据类型类的定义(一)
|
1月前
|
C#
C#学习相关系列之自定义遍历器
C#学习相关系列之自定义遍历器
|
1月前
|
C#
24. C# 编程:用户设定敌人初始血值的实现
24. C# 编程:用户设定敌人初始血值的实现
22 0
|
2月前
|
SQL 数据库连接 应用服务中间件
C#WinForm基础编程(三)
C#WinForm基础编程
79 0
|
2月前
C#WinForm基础编程(二)
C#WinForm基础编程
61 0