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;} }