欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linq 查询

程序员文章站 2022-07-04 08:44:06
...

Linq 探索

一开始,由于查询时,使用了GroupBy进行分组

查询结果是 IGrouping<bool,int> 类

Linq 查询

得到了查询结果却不知道怎么使用

最后用了很复杂的方法才取出查询结果

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//需要引用
using System.Linq;

public class LinqTest : MonoBehaviour
{
    //一个存放整数的列表
    private List<int> list = new List<int>{0,1,2,3,4,5,6,7,8,9,10,11,12};
    
    void Start()
    {
        //查询
        /*
         遍历列表,当前遍历的元素命名为i
         根据限制条件筛选元素
         根据指定条件将元素分组并存放在新集合中
         将集合数据取出
         赋值给变量query
         */
        var query =
            from i in list
            where i < 10
            group i by i % 2 == 0 into groupResult
            select groupResult;
        
        //存放查询结果:多个int类型的列表的集合
        List<List<int>> listoflist = new List<List<int>>();

        //遍历查询结果,以列表的形式存放进列表
        foreach (var i in query)
        {
            listoflist.Add(i.ToList());
        }
        
        //遍历查询结果列表
        foreach (var i in listoflist)
        {
            //遍历每个列表中的元素
            print("---------");
            foreach (var j  in i)
            {
                print(j);
            }
        }
    }
}

改进后

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//需要引用
using System.Linq;

public class LinqTest : MonoBehaviour
{
    //一个存放整数的列表
    private List<int> list = new List<int>{0,1,2,3,4,5,6,7,8,9,10,11,12};
    
    void Start()
    {
        //查询
        /*
         遍历列表,当前遍历的元素命名为i
         根据限制条件筛选元素
         根据指定条件将元素分组并存放在新集合中
         将集合数据取出
         以列表的形式赋值给变量query
         */
        
        print("SQL写法演示");
        
        //SQL写法
        var query =
            from i in list
            where i < 10
            group i by i % 2 == 0 into groupResult
            select groupResult.ToList();
        
        //遍历查询结果列表
        foreach (var list in query)
        {
            //遍历每个列表中的元素
            print("---------");
            foreach (var i in list)
            {
                print(i);
            }
        }
        
        print("函数式写法演示");
        
        //函数式写法
        //需要使用到lambda表达式
        var query2 = list
            .Where(i => i < 10 )
            .GroupBy(i => i % 2 == 0)
            .ToList();

        //遍历查询结果列表
        foreach (var list in query2)
        {
            //遍历每个列表中的元素
            print("---------");
            foreach (var i in list)
            {
                print(i);
            }
        }
        
        print("SelectMany演示");
        
        //使用SelectMany()可以对Group的结果拆包,将多个集合整合为一个集合
        var query3 = list
            .Where(i => i < 10)
            .GroupBy(i => i % 2 == 0)
            .SelectMany(i=>i)
            .ToList();
        
        //遍历查询结果列表
        foreach (var i in query3)
        {
            print(i);
        }
    }
}

注:所有的ToList函数都可以省略。

ToList函数使用前 var变量的类型

Linq 查询

ToList函数使用后 var变量的类型

Linq 查询

其实想要获取 IGrouping的变量的正常类型的值,直接使用它本身就好了。

它的类型只是看起来很特殊,其实本质还是普通类型。

运行结果

Linq 查询

上一篇: Linq

下一篇: Linq初学用法(2)