Linq 查询
程序员文章站
2022-07-04 08:44:06
...
Linq 探索
一开始,由于查询时,使用了GroupBy进行分组
查询结果是 IGrouping<bool,int> 类
得到了查询结果却不知道怎么使用
最后用了很复杂的方法才取出查询结果
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变量的类型
ToList函数使用后 var变量的类型
其实想要获取 IGrouping的变量的正常类型的值,直接使用它本身就好了。
它的类型只是看起来很特殊,其实本质还是普通类型。
运行结果
上一篇: Linq
下一篇: Linq初学用法(2)