linq高级查询

聚合类:Count,Max/Min,Average  排序类:TheyBy  分区类:Take,TakeWhile,Skip,SkipWhile

集合类:Distinct 生成类:Range,Repeat.

Student obj1 = new Student() { StudentId = 1000, StudentName = "张宇" };
            Student obj2 = new Student() { StudentId = 1001, StudentName = "王宇" };
            Student obj3 = new Student() { StudentId = 1002, StudentName = "周宇" };
            Student obj4 = new Student() { StudentId = 1003, StudentName = "李星" };
            Student obj5 = new Student() { StudentId = 1004, StudentName = "赵雷" };
            Student obj6 = new Student() { StudentId = 1005, StudentName = "张聪" };
            List<Student> objList = new List<Student>()
            {
                obj1,obj2 ,obj3 ,obj4 ,obj5 ,obj6
            };
            var list = (from stu in objList
                        where stu.StudentId > 1000
                        select stu).Count();
            var list1 = objList.Where(stu => stu.StudentId > 1000)
                               .Select(stu => stu)
                               .Count();
            Console.WriteLine(list + "-" +list1 );

                Count()表示返回元素个数。

 Student obj1 = new Student() { StudentId = 1000, StudentName = "张宇",Age =23 };
            Student obj2 = new Student() { StudentId = 1001, StudentName = "王宇",Age =24 };
            Student obj3 = new Student() { StudentId = 1002, StudentName = "周宇" ,Age =22};
            Student obj4 = new Student() { StudentId = 1003, StudentName = "李星",Age =19 };
            Student obj5 = new Student() { StudentId = 1004, StudentName = "赵雷",Age=28 };
            Student obj6 = new Student() { StudentId = 1005, StudentName = "张聪",Age =21 };
            List<Student> objList = new List<Student>()
            {
                obj1,obj2 ,obj3 ,obj4 ,obj5 ,obj6
            };
            var maxAge = (from stu in objList
                        where stu.StudentId > 1000
                        select stu.Age).Max();
            var minAge = (from stu in objList
                          where stu.StudentId > 1000
                          select stu.Age).Min();
            var avgAge = (from stu in objList
                          where stu.StudentId > 1000
                          select stu.Age).Average();
            var sumAge = (from stu in objList
                          where stu.StudentId > 1000
                          select stu.Age).Sum();
            Console.WriteLine(maxAge+ "  "+minAge +"  "+avgAge +" "+sumAge );

             Max/Min求最大值、最小值,Average 返回集合的平均值,Sum返回集合的总数。             

Student obj1 = new Student() { StudentId = 1000, StudentName = "张宇",Age =23 };
            Student obj2 = new Student() { StudentId = 1001, StudentName = "王宇",Age =24 };
            Student obj3 = new Student() { StudentId = 1002, StudentName = "周宇" ,Age =22};
            Student obj4 = new Student() { StudentId = 1003, StudentName = "李星",Age =19 };
            Student obj5 = new Student() { StudentId = 1004, StudentName = "赵雷",Age=28 };
            Student obj6 = new Student() { StudentId = 1005, StudentName = "张聪",Age =21 };
            List<Student> objList = new List<Student>()
            {
                obj1,obj2 ,obj3 ,obj4 ,obj5 ,obj6
            };
            var stus1 = from s in objList
                        orderby s.Age,s.StudentName ,s.StudentId 
                        select s;
            var stus2 = objList.OrderBy(s => s.StudentName)
                                .ThenBy(s => s.Age)
                                .ThenBy(s => s.StudentId)
                                .Select(p => p);
            foreach (var item in stus2)
            {
                Console.WriteLine(item.StudentName );
            }

ThenBy提供复合排序条件

 int[] nums = { 1, 3, 4, 2, 8, 9, 5 };
            var list1 = nums.Skip(1).Take(3);
            var list2 = nums.SkipWhile(i => i % 3 != 0)
                            .TakeWhile(i => i % 2 != 0);
            foreach (var item in list1)
            {
                Console.WriteLine(item);
            }
            foreach (var item in list2)
            {
                Console.WriteLine(item);
            }

Take提供指定数量的项,Skip跳过指定数量的项并获取剩余的项,TakeWhile只要满足指定的条件,就会返回序列的元素,然后跳过剩余的元素,SkipWhile只要满足指定的条件,就跳过序列中的元素,然后返回剩余元素。

int[] nums = { 1, 3, 4, 2, 8, 9, 5,5,5,5,2,2,2 };
            var list = nums.Distinct();
            var list1 = (from s in nums
                        select s).Distinct();
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
            foreach (var item in list1)
            {
                Console.WriteLine(item);
            }

Distinct去掉集合中的重复项

var num1 = Enumerable.Range(1, 10);
            var num2 = Enumerable.Repeat("Linq", 10);
            foreach (var item in num1)
            {
                Console.WriteLine(item);
            }
            foreach (var item in num2)
            {
                Console.WriteLine(item);
            }

Range生成一个整数序列

Repeat生成一个重复项的序列,注意:Range/Repeat不是扩展方法,而是普通的静态方法,Range只能产生整数序列,Repeat可以产生泛型序列,所有的查询方法都存放在System.Linq.Enumerable静态类中。

猜你喜欢

转载自blog.csdn.net/qq_37589387/article/details/88565256