欢迎来到天天文库
浏览记录
ID:57650239
大小:19.21 KB
页数:8页
时间:2020-08-30
《LINQ的经典例子-Where-Select、SelectMany、SkipWhile子句中使用数组索引.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Where子句的用法我们除了可以如下方式书写带Where子句的LINQ外:frompinproducts wherep.UnitsInStock>0&&p.UnitPrice>3.00M selectp;还可以对数组(所有实现了IEnumerable接口的对象都可以)的实体使用Where扩展方法。 把一个查询语句写成多个扩展函数的方式,这其实是编译器处理查询语句的方法,比如下面的查询语句:int[]arr=newint[]{8,5,89,3,56,4,1,58};varm=fromninarrwheren<5orderbynsel
2、ectn;编译器在编译后,替我们产生的代码等价于如下的代码:IOrderedSequencem=arr.Where(delegate(intn){ return(n<5);}).OrderBy(delegate(intn){ returnn;}); 下面我们来看一个使用Where扩展方法的例子:我们有一个字符串数组,一次是0到9的英文单词,我们查询出这10个字符的长度比它所在数组的位置这两个数字比较小的英文单词.这个查询可能有些绕口,你可以先看下面这些代码:publicstaticvo
3、idLinqDemo01(){ string[]digits={"zero","one","two","three","four","five","six","seven","eight","nine"}; varshortDigits=digits.Where((dd,aa)=>dd.Length4、erthanitsvalue.",d);}输出结果:Shortdigits:Thewordfiveisshorterthanitsvalue.Thewordsixisshorterthanitsvalue.Thewordsevenisshorterthanitsvalue.Thewordeightisshorterthanitsvalue.Thewordnineisshorterthanitsvalue.下面我们就来分析上述代码中最核心的代码:digits.Where((dd,aa)=>dd.Length5、什么? 1、Where子句其实是用扩展方法来实现的如果你对扩展方法不熟悉,请先看我之前的几篇博客:C#3.0中的扩展方法(ExtensionMethods)C#3.0中使用扩展方法来扩展接口OrcasBeta1对多个同名扩展方法的处理逻辑微软替我们实现的 Where子句对应的扩展函数实际是如下的定义:namespaceSystem.Linq{ publicdelegateTResultFunc(TArg0arg0,TArg1arg1); publicstaticclassEnume6、rable { publicstaticIEnumerableWhere(thisIEnumerablesource,Funcpredicate); publicstaticIEnumerableWhere(thisIEnumerablesource,Funcpredicate); }}其中红色字体的那个扩展函数,就是我们上面代码7、实际使用的扩展函数。我们这个扩展函数参数:Funcpredicate的定义看上面代码的绿色delegate代码。 2、Where子句参数书写的是Lambda表达式如果你不清楚什么是Lambda表达式,你可以参看我之前的博客:C#3.0的Lambda表达式(LambdaExpressions)(dd,aa)=>dd.Length8、关键字子句。3、这个Where子句中Lambda表达式第二个参数是数组索引,我们可以在Lambda表达式内部使用数组索引。来做一些复杂的判断。具有数组索引的LINQ关键字除了Where还以下几个Select,SelectMany,Count,All
4、erthanitsvalue.",d);}输出结果:Shortdigits:Thewordfiveisshorterthanitsvalue.Thewordsixisshorterthanitsvalue.Thewordsevenisshorterthanitsvalue.Thewordeightisshorterthanitsvalue.Thewordnineisshorterthanitsvalue.下面我们就来分析上述代码中最核心的代码:digits.Where((dd,aa)=>dd.Length5、什么? 1、Where子句其实是用扩展方法来实现的如果你对扩展方法不熟悉,请先看我之前的几篇博客:C#3.0中的扩展方法(ExtensionMethods)C#3.0中使用扩展方法来扩展接口OrcasBeta1对多个同名扩展方法的处理逻辑微软替我们实现的 Where子句对应的扩展函数实际是如下的定义:namespaceSystem.Linq{ publicdelegateTResultFunc(TArg0arg0,TArg1arg1); publicstaticclassEnume6、rable { publicstaticIEnumerableWhere(thisIEnumerablesource,Funcpredicate); publicstaticIEnumerableWhere(thisIEnumerablesource,Funcpredicate); }}其中红色字体的那个扩展函数,就是我们上面代码7、实际使用的扩展函数。我们这个扩展函数参数:Funcpredicate的定义看上面代码的绿色delegate代码。 2、Where子句参数书写的是Lambda表达式如果你不清楚什么是Lambda表达式,你可以参看我之前的博客:C#3.0的Lambda表达式(LambdaExpressions)(dd,aa)=>dd.Length8、关键字子句。3、这个Where子句中Lambda表达式第二个参数是数组索引,我们可以在Lambda表达式内部使用数组索引。来做一些复杂的判断。具有数组索引的LINQ关键字除了Where还以下几个Select,SelectMany,Count,All
5、什么? 1、Where子句其实是用扩展方法来实现的如果你对扩展方法不熟悉,请先看我之前的几篇博客:C#3.0中的扩展方法(ExtensionMethods)C#3.0中使用扩展方法来扩展接口OrcasBeta1对多个同名扩展方法的处理逻辑微软替我们实现的 Where子句对应的扩展函数实际是如下的定义:namespaceSystem.Linq{ publicdelegateTResultFunc(TArg0arg0,TArg1arg1); publicstaticclassEnume
6、rable { publicstaticIEnumerableWhere(thisIEnumerablesource,Funcpredicate); publicstaticIEnumerableWhere(thisIEnumerablesource,Funcpredicate); }}其中红色字体的那个扩展函数,就是我们上面代码
7、实际使用的扩展函数。我们这个扩展函数参数:Funcpredicate的定义看上面代码的绿色delegate代码。 2、Where子句参数书写的是Lambda表达式如果你不清楚什么是Lambda表达式,你可以参看我之前的博客:C#3.0的Lambda表达式(LambdaExpressions)(dd,aa)=>dd.Length8、关键字子句。3、这个Where子句中Lambda表达式第二个参数是数组索引,我们可以在Lambda表达式内部使用数组索引。来做一些复杂的判断。具有数组索引的LINQ关键字除了Where还以下几个Select,SelectMany,Count,All
8、关键字子句。3、这个Where子句中Lambda表达式第二个参数是数组索引,我们可以在Lambda表达式内部使用数组索引。来做一些复杂的判断。具有数组索引的LINQ关键字除了Where还以下几个Select,SelectMany,Count,All
此文档下载收益归作者所有