首页 > 代码库 > LINQ中的高级查询

LINQ中的高级查询

 LINQ查询方法:

1、Method Syntax查询方法方式:主要利用System.Linq.Enumerable类定义的拓展方法和Lambda表达式方法进行查询。

2、Query Syntax查询语句方式。


查询语句和查询方法的关系:编译器负责在编译时将查询语句便以为查询方法,大部分的查询方法都有对应的查询语句姓氏。一般情况下,我们会使用查询语句+查询方法的混合方式进行查询。


常见的高级查询方法分为:聚合、排序、分区、集合、生成。


Ⅰ聚合类:


<span style="font-size:18px;">            //高级方法---聚合类
            //数组数据persons
            int[] arr = { 234, 36, 47, 25, 14, 467, 251235, 135, 35 };
            //聚合类
            Console.WriteLine("arr的最大值" + arr.Max());
            Console.WriteLine("arr的最小值"+ arr.Min());
            Console.WriteLine("arr的平均值" + arr.Average());
            Console.WriteLine("arr的数组元素个数"+ arr.Count());
            Console.WriteLine("arr的总和"+ arr.Sum());
</span>

Ⅱ排序类:

<span style="font-size:18px;">            //数组数据persons
            int[] arr = { 234, 36, 47, 25, 14, 467, 251235, 135, 35 };
            //排序类
            var result = arr.OrderBy(p=>p.ToString().Substring(0,1));

            result.Print();
</span>

Print方法代码:


<span style="font-size:18px;">        public static void Print(this IEnumerable<int> ie)
        {

            IEnumerator<int> result = ie.GetEnumerator();
            Console.WriteLine("\n------------------------\n");
            while(result.MoveNext())
            {
                Console.WriteLine(result.Current);
            }
            Console.WriteLine("\n------------------------\n");
        }
</span>



用查询语句排序:

<span style="font-size:18px;">            var result = arr.OrderBy(p => p.ToString().Substring(0, 1));</span>

用2次排序:

<span style="font-size:18px;">            var result = arr.OrderBy(p=>p.ToString().Substring(0,1)).ThenBy(p=>p);//2次排序
</span>


Ⅲ分区类



<span style="font-size:18px;">            //分区类(分页的时候用到的会很多)
            var result = arr.Skip(3).Take(3);
            result.Print();
</span>


代码为:


<span style="font-size:18px;">            var result = arr.SkipWhile(p => p > 4);//方法体部分是该linq语句不再往后执行的条件。

            result.Print();
</span>


<span style="font-size:18px;">            var result = arr.SkipWhile(p => p > 4);//方法体部分是该linq语句不再往后执行的条件。当第一次聚到条件成立时立即取出
</span>

查询为空就对了。


<span style="font-size:18px;">            var result = arr.TakeWhile(p => p > 4);//方法体部分是该linq语句提取数据的条件,当第一次遇到条件不成立的情况就停止执行。
            result.Print();
</span>


查询结果:




Ⅳ集合类


<span style="font-size:18px;">            //集合类
            var result = arr.Distinct();          
            result.Print();
</span>

Ⅴ生成类--静态方法


<span style="font-size:18px;">            var result = System.Linq.Enumerable.Range(10,50);
            result.Print();
</span>

这个运行的结果是从10到59的50个数。




LINQ中的高级查询