继续学习linq语法

/****************************************************
	功能:继续学习linq语法
*****************************************************/

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

public class MoreLinqTest : 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

    #region 用来测试连接运算的第二个表
    public struct Sex
    {
        public string name;
        public bool isMen;

        public Sex(string _name = "", bool _isMen = true)
        {
            name = _name;
            isMen = _isMen;
        }
        public override string ToString()
        {
            return $"name={name},_isMen={isMen}";
        }
    }
    #endregion
    #region 第二个表数据初始值
    List<Sex> sexs = new List<Sex>()
    {
        new Sex(),
        new Sex("小明",true),
        new Sex("小红",false),
        new Sex("小熊",true),
        new Sex("马云",true),
        new Sex("小暗",false),
    };
    #endregion

    

    private void Start()
    {
        //TestGroupBy();
        //TryFunLinq();
        //TryFunLinq2();
        //TestLinqIn();
        TestJoin();
    }

    //用groupby进行分组
    //语法:grup [源] by [条件] into [结果]
    void TestGroupBy()
    {
        var res =
            from a in students
                //group a by a.age into n         //这样会根据值不同分组
            group a by a.age > 20 into n        //这样会根据是否符合分成真假量组
            select n;

        foreach (var item in res)
        {
            string outRes = "key=" + item.Key.ToString();
            foreach (var one in item)
            {
                outRes += "\n" + one;
            }
            Debug.Log(outRes);
        }
    }

    //in语法
    void TestLinqIn()
    {
        var res =
            from a in students
            where (new int[] { 40, 21 }).Contains(a.age)
            select a;
        ShowAns(res);
    }

    //join语法
    //还有使用select选择多个字段的方法
    void TestJoin()
    {
        var res1 =
            from a in students
            join b in sexs
            on a.name equals b.name
            select new                  //选择多个字段
            {
                a.name,
                a.age,
                b.isMen,
            };

        res1.ToList().ForEach(item =>
           Debug.Log(item)              //查询结果是一个神奇的匿名类型
        );
    }
    
    //尝试函数式的linq语法。简单使用。
    void TryFunLinq()
    {
        var res1 =
            students.Where(p => p.age > 20);
        ShowAns(res1);

        //Debug.Log(students.Select(p => p).Count());
    }

    //尝试函数式的linq语法。更多方法。
    void TryFunLinq2()
    {
        //每次运行一行,其他的注释
        var res2 =
            //students.Select(p => p.age);
            //students.OrderBy(p => p.age).Select(p => p.age);
            students.OrderByDescending(p => p.age).Select(p => p.age);

        res2.ToList().ForEach(p => Debug.Log($"结果为:{p}"));
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值