//查询表达式要以from字句开头,以select或group字句结束,第一个from字句和最后一个select字句或group字句之间,
// 可以包含一个或多个where字句,let字句,join字句,orderby子句和group子句,甚至还可以是from子句.
// 共有8个基本子句,如下:
// from子句:指定查询操作的数据源和范围变量
// select子句:指定查询结果得到类型和表现形式
// where子句:指定筛选元素的逻辑条件
// let子句:引入用来临时保存查询表达式中的字表达式结果的范围变量.
// orderby子句:对查询结果进行排序操作,包括升序和降序
// group子句:对查询结果进行分组.
// into子句:提供一个临时标识符. join子句,group子句或select子句可以通过该标识符引用查询操作中中的中间结果
// join子句:连接多个用于查询操作的数据源.
// from与select关键字 Select更类似一个return关键字,可以用特殊写法起到筛选的目的
int[] array = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var Query1 = from i in array select i; //把array提取到i,不做筛选直接把i的元素赋值到Query1
//上面的代码相当于:
List<int> tmp = new List<int>();
for (int i = 0; i < array.Length; i++)
{
tmp.Add(array[i]);
}
var Query2 = from n in array where n > 6 select n; //把array提取到n,再对n做筛选,再把筛选结果赋值到Query1
tmp.Clear();
//上面的代码相当于:
for (int i = 0; i < array.Length; i++)
{
if (array[i] > 6)
{
tmp.Add(array[i]);
}
}
//让两个数组中的同下标元素相加,并赋值到新的集合中
var Query3 = from i in array from n in array1 select i + n;
// where 关键字 where 是一个条件筛选语句
var Query5 =
from i in array //提值
where i < 5 //筛选
select i; //赋值
var Query6 =
from i in array //提值
where i < 8 && i > 3 //筛选
select i + 1; //赋值
var Query7 = from i in array //提值
where IsEven(i) //甚至可以用函数来筛选,但where关键句 调用的函数返回值必须是bool
select i; //赋值
public bool IsEven(int i)
{
return i % 2 == 0;
}
//let 关键字 该关键字本质上只是加多一道处理过程,在某些情况下可能会需要
var Query8 = from i in array
let o = i % 2 //这里是一个处理语句,把所有元素求余,再放到o这个集合中
where o == 0 //对求余结果进行筛选
select o; //赋值
//orderby 关键字 descending 降序 ascending 升序
var Query9 = from i in array
orderby i descending //descending 降序 ascending 升序
select i;
textBox1.Clear();
foreach (var item in Query9)
{
textBox1.Text += item + (item == 0 ? "" : " || ");
}
//group by 关键字
var Query10 = from i in array
where i < 9 && i > 1
group i by i / 3; //这有时会是一个多维集合,会把处理结果相同的分到一组,同时赋值
textBox1.Clear();
foreach (var item in Query10)
{
foreach (var i in item)
{
textBox1.Text += i + "|";
}
textBox1.Text += "\r\n";
}
// into 关键字 这个关键字分开理解即可 in to 放到~ 作用: 声明一个临时变量,将左边处理结果存放到右边的变量中 变量类型由编译器推导决定
var Query11 = from i in array
where i < 9 && i > 1
group i by i / 3 into n //把左边的处理结果赋值到右边的临时变量n中
from c in n
select c;
// join 关键字 连接两个集合 equals 判断是否相等
int[] array = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int[] arrayint = new int[] { 1, 3, 5, 7 };
var Query12 = from i in arrayint
where i < 7 //选出比7小的元素
join b in array on i equals b //把array的元素加到b中,然后再把i和b中相同的元素留下
select b;
未完待续..