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


相关文章
|
7天前
|
C#
C#的基本语法结构学习
【5月更文挑战第17天】C#基础语法包括变量(如`int x = 10`)、常量(`const int MAX_VALUE = 100`)、运算符(如算术和比较运算符)、控制语句(if、for、while等)和函数声明(`int Add(int x, int y) { return x + y; }`)。这些构成C#程序的基本元素。
30 0
|
7天前
|
C#
C#的类和对象的概念学习案例刨析
【5月更文挑战第17天】C#是一种面向对象的语言,以类和对象为核心。类作为对象的模板,定义了属性(如Name, Age)和行为(如Greet)。对象是类的实例,可设置属性值。封装通过访问修饰符隐藏实现细节,如Customer类的私有name字段通过Name属性访问。继承允许新类(如Employee)从现有类(Person)继承并扩展。多态让不同对象(如Circle, Square)共享相同接口(Shape),实现抽象方法Area,提供灵活的代码设计。
30 1
|
9天前
|
程序员 C#
C#抽象类和抽象方法详解
C#抽象类和抽象方法详解
12 0
|
9天前
|
SQL 开发框架 .NET
C#linq表达式的应用
C#linq表达式的应用
10 0
|
9天前
|
存储 开发框架 .NET
C#中将DataTable转化成ListT的方法解析
C#中将DataTable转化成ListT的方法解析
11 0
|
9天前
|
数据采集 前端开发 数据挖掘
Fizzler库+C#:从微博抓取热点的最简单方法
本文介绍如何使用Fizzler库和C#构建微博热点信息爬虫。通过Fizzler的CSS选择器定位关键信息,提取热点标题和排名,实现微博内容的智能挖掘。示例代码展示单线程和多线程采集方法,并涉及代理IP使用。
Fizzler库+C#:从微博抓取热点的最简单方法
|
9天前
|
存储 数据采集 API
C# GetField 方法应用实例
C# GetField 方法应用实例
|
9天前
|
JSON 安全 API
C# GetMethod 方法应用实例
C# GetMethod 方法应用实例
|
9天前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
|
9天前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。