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


相关文章
|
2月前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
3月前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
134 65
|
2月前
|
JSON 程序员 C#
使用 C# 比较两个对象是否相等的7个方法总结
比较对象是编程中的一项基本技能,在实际业务中经常碰到,比如在ERP系统中,企业的信息非常重要,每一次更新,都需要比较记录更新前后企业的信息,直接比较通常只能告诉我们它们是否指向同一个内存地址,那我们应该怎么办呢?分享 7 个方法给你!
|
2月前
|
C# UED SEO
C# 异步方法async / await任务超时处理
通过使用 `Task.WhenAny`和 `Task.Delay`方法,您可以在C#中有效地实现异步任务的超时处理机制。这种方法允许您在指定时间内等待任务完成,并在任务超时时采取适当的措施,如抛出异常或执行备用操作。希望本文提供的详细解释和代码示例能帮助您在实际项目中更好地处理异步任务超时问题,提升应用程序的可靠性和用户体验。
86 3
|
3月前
|
存储 C#
【C#】大批量判断文件是否存在的两种方法效率对比
【C#】大批量判断文件是否存在的两种方法效率对比
55 1
|
3月前
|
开发框架 缓存 算法
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
|
3月前
|
C#
C#的方法的参数传递
C#的方法的参数传递
34 0
|
3月前
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
62 0
|
2月前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
44 3
|
19天前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
70 12
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等