linq的各项高级查询

 基本查询操作符-分组数组

 

GroupBy()

Public staticIEnumerable<IGrouping<TKey,TSource>>GroupBy

<TSource,>

 

例子如下:

private voidbutton4_Click(object sender, EventArgs e)

        {

            List<string>persons = new List<string>();

           persons.Add("zhang san");

           persons.Add("li si");

           persons.Add("wang wu");

           persons.Add("er liu");

           persons.Add("xu weili");

           persons.Add("zhang jia yuan");

 

          //按照姓名来分组--取出姓名中的空格前的部分

            var result = persons.GroupBy(p => p.Split(new char[] { ' ' })[0]);

            foreach (var group in result)

            {

                Console.WriteLine(""+ group.Key);

                foreach (var name in group)

                {

                   Console.WriteLine("\t"+name);

                }

 

            }

           

        }

查询执行的时机

1 获取数据源

2 定义查询

3 执行查询

定义查询后,查询知道需要枚举结果是才被真正的执行,这种方式成为“延迟查询”

当查询方法返回单一值时,查询立即执行

//查询时机--当返回值是单值时,马上执行语句,否则延迟执行

            var result = persons.Select(p => p).Count();

            Console.WriteLine("个数:"+result);

 

 

LINQ查询的两种凡是

1        基于方法的查询 Method Syntax

2        基于语句的查询 Query Syntax

 

查询语句 vs 查询方法

1,  CLR本省并不能理解查询语句,它会通过编译器在编译的时候

把我们的语句翻译为查询方法

2,  大部分查询方法都有对应的查询语句形式:

如Select() 对应select、OrderBy()对应orderby

3,部分查询方法目前在C#中还没有对应的查询语句

所以尽量的优先使用语句  而不是方法

 

 

高级查询方法:

聚合类

  Count,Max/Min,Avelage

排序类

   Thenby 

分区类

Take,   TakeWhile,  Skip,  SkipWhile

集合类

Distinct

生成类

Range,Repeat

   //高级方法

          int[]arr={213,454,3,345,34,2323,23,5,343,212,12,343,3236,67,667};

 

          var result = arr.OrderBy(p =>p.ToString().Substring(0, 1)).ThenBy(p=>p);//2次排序

          Console.WriteLine(result);

 

         // var result = from p in result orderby p descendingselect p;

    //分区类

          //var result = arr.Skip(3).Take(3);

 

          var result = arr.SkipWhile(p => p > 4);//方法体部分是该linq语句不再往后执行的条件,当第一次遇到条件成立时,则取剩下所有的

//集合类

          //var result = arr.Distinct();

//生成类--静态类

         System.Linq.Enumerable.Range(0,10);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值