C#基本linq语句使用

/****************************************************
	功能:学习基本linq语句
    直接复制到代码文件里即可食用
    每次请只执行start里一个方法,其他注释掉
    推荐把方法折叠起来看
    只有前8个。
*****************************************************/

using System;
using System.Linq;
using System.Collections.Generic;
using UnityEngine;




public class TestLinq : MonoBehaviour
{

    #region 数据定义
    public struct Student
    {
        public string name;
        public int age;
        public float score;

        public Student(string _name = "", int _age = 20, float _score = 60f)
        {
            name = _name;
            age = _age;
            score = _score;
        }
        public override string ToString()
        {
            return $"name={name},age={age},score={score}";
        }
    }
    //用来输出查询结果
    void ShowAns(IEnumerable<Student> value)
    {
        foreach (var item in value)
        {
            Debug.Log($"查询结果为:{item}");
        }
    }
    #endregion
    #region 数据初始值
    List<Student> students = new List<Student>()
    {
        new Student(),
        new Student("小明",21,100f),
        new Student("小红",19,90f),
        new Student("小熊",18,120f),
        new Student("马云",40,150f),
        new Student("小暗",21,80f),
    };
    #endregion


    /*
     * 学习资料来源:https://www.cnblogs.com/sxjljj/p/11348652.html
     * 但是内容不一样哦,把这个直接粘贴到代码里就能用
     * 
     * linq是一种可以在c#中直接以数据库语言进行查询的方法。
     * 可操作各种容器如list等,
     * 可简化一些条件查询操作
     * linq甚至可以操作数据库,
     * 比原始的字符串指令式数据库操作相比,
     * 可以进行关键字检查,可读性强,不易出错
     * 
     * 常见关键字如下
     * from子句:指定查询操作的数据源和范围变量
     * where子句:筛选元素的逻辑条件,返回值是一个bool类型
     * select子句:指定查询结果的类型和表现形式
     * orderby子句:对查询结果进行排序(升序或者降序)
     * group子句:对查询结果进行分组
     * into子句:提供一个临时标识符,
     *      该表示可充当对join/group/select子句结果的引用
     * join子句:连接多个查询操作的数据源
     * let子句:引入用于存储查询表达式中的子表达式结果的范围变量
     * 
     * 简单的函数计算
     * count
     * min
     * max
     * sum
     */

    private void Start()
    {
        //FirstLinq();
        //TestWhere();
        //TestFunc();
        //TestOrder();
        //TestOrder2();
        //TestPage();
        TestLike();
    }

    //基本查询。
    void FirstLinq()
    {
        //必须以from开始,以select 或group by结尾
        var res =
            from a in students
            select a;

        ShowAns(res);
    }

    //使用where的筛选。
    void TestWhere()
    {
        //where可以使用各种表达式。
        //可以接多个where
        var res =
            from a in students
                //where a.age == 21f || a.age == 19f
                //where a.age > 20
            where a.age % 2 == 0
            where a.age != 0
            select a;

        ShowAns(res);
    }

    //使用基本查询函数
    void TestFunc()
    {
        var res =
            from a in students
            select a.age;

        Debug.Log($"max={(res).Max()}");
        Debug.Log($"min={(res).Min()}");
        Debug.Log($"max={(res).Count()}");
        Debug.Log($"max={(res).Sum()}");

    }

    //测试排序
    void TestOrder()
    {
        //排序可多次使用,
        //实现主排序关键字相同时,
        //继续用次要关键字排序
        var res =
            from a in students
            orderby a.score
            orderby a.age
            select a;


        ShowAns(res);
    }

    //正序和倒序排序
    void TestOrder2()
    {
        //排序可多次使用,可指定正序倒序
        var res =
            from a in students
                //orderby a.age descending//倒序排序
            orderby a.age ascending//正序排序

            select a;

        ShowAns(res);
    }

    //查某一段数据(分页)
    void TestPage()
    {
        var res =
            from a in students
            select a;
        //这个函数类似sql中top
        Debug.Log("top=" + res.FirstOrDefault());
        Debug.Log("跳过两条数据的结果");
        //跳过前2条数据
        ShowAns(res.Skip(2));
        Debug.Log("查2-4的数据");
        ShowAns(res.Skip(2).Take(2));
    }

    //使用Contains实现sql中的like操作
    //注意此处需要做空异常检测!
    //https://www.cnblogs.com/zhaofangyan/p/10154637.html
    void TestLike()
    {
        var res =
            from a in students
            where a.name != null && a.name.Contains("小")
            select a;

        ShowAns(res);
        //Debug.Log("".Contains(""));
    }
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值