public static void Main(string[] args)
{
// 语法 select element 选中返回的查询的结果集
//select 不仅可以为数据源中的元素,还可以是该元素的不同的操作结果,包括
//属性 方法 运算等
Student[] stu = new Student[]{
new Student(){Name = "张三", Age=18, Sex="男"},
new Student(){Name = "李四", Age=19, Sex="女"},
new Student(){Name = "小花", Age=22, Sex="女"},
new Student(){Name = "小明", Age=25, Sex="男"}
};
//打印出年龄小于22 同学的姓名 只显示姓名
var result = from p in stu where p.Age < 22 select p.Name;
foreach (var r in result) {
Console.WriteLine(r); //张三, 李四
}
//语法 where element 判断条件 符合条件的元素
//where
//打印出 学生中名字为小明的 年龄
var ret = from p1 in stu where p1.Name == "小明" select p1.Age;
foreach (var r in ret) {
Console.WriteLine(r); //25
}
//语法 orderby element sorttype 将指定元素进行排序 ascending desending 默认为ascending
var ret1 = from p2 in stu orderby p2.Age descending select p2.Age;
foreach (var r in ret1) {
Console.WriteLine(r); //25 22 19 18
}
//语法 group element by key 将指定元素根据指定key进行分组
var ret2 = from p3 in stu group p3 by p3.Sex;
foreach (var r in ret2) {
Console.WriteLine(r.Key); //打印组的名称
foreach (var r2 in r) {
Console.WriteLine(r2.Name); //打印组成员
}
}
// 语法 group element by key into tmpGrp 将分组后成员再次筛选 查询等等 不能直接通过select 进行连接
var ret3 = from p4 in stu group p4 by p4.Age into tmp orderby tmp.Key descending select tmp;
//通过性别进行分组,再次筛选出对应的名字;
Console.WriteLine("============group element by key into");
foreach (var r in ret3) {
Console.WriteLine(r.Key);
foreach (var r2 in r) {
Console.WriteLine(r2.Name);
}
}
// from from 联合查询
Console.WriteLine("===========from from");
Student[] stu1 = new Student[]{
new Student(){Name = "张三", Age=18, Sex="男"},
new Student(){Name = "李四", Age=234, Sex="女"},
new Student(){Name = "小花", Age=2342, Sex="女"},
new Student(){Name = "小明", Age=25, Sex="男"}
};
var ret4 = from p5 in stu from p6 in stu1 where p5.Age == p6.Age select p5.Name;
foreach (var r in ret4) {
Console.WriteLine(r); //张三 小明
}
//理论上两个from 的数据源可以来自同一数据源的属性方法,也可以来自任意的数据对象
Console.ReadKey(true);
}
}
class Student{
public string Name{get; set;}
public int Age{get; set;}
public string Sex{get; set;}
}