入门day2

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

 

posted @ 2017-11-25 10:42  我是外婆  阅读(117)  评论(0编辑  收藏  举报