免费邮箱 |加入收藏 | 会员中心 | 我要投稿 | RSS
您当前的位置:首页 > 数据库 > MS Sql Server

LINQ查询基础

时间:2011-05-18 22:26:15  来源:站内  作者:潘春会

                Console.WriteLine(item);

            }

输出如下:

 

3.  Take、TakeWhile:Take(int i)从数据源起始位置返回指定数量的个数。如果指定的参数为-1,则返回为0,若指定的参数大于数据源的个数,则返回全部数据。TakeWhile需要指定委托来实现获取元素.它有两个重载。一个参数的委托MSDN给出的解释如下:

【此方法通过使用延迟执行实现。即时返回值为一个对象,该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach(或 Visual Basic 中的 For Each)来枚举该对象时,才执行此方法表示的查询。

TakeWhile<(Of <(TSource>)>)(IEnumerable<(Of <(TSource>)>), Func<(Of <(TSource, Boolean>)>)) 方法使用 PRedicate 对 source 中的每个元素进行测试,如果结果为 true,则生成该元素。当谓词函数对某个元素返回 false 或 source 中不再包含元素时,枚举将停止。】

两个参数的委托第一个参数表示要测试的元素。第二个参数表示 source 中元素的从零开始的索引

注意其中标红的部分:意思就是说,TakeWhile会枚举集合中的元素,通过委托的函数进行操作。但是如果中途某个元素返回false后将停止对集合中后续的元素继续枚举,并且返回的结果中包含的元素为返回False前取出的所有元素。当然当枚举完集合时,肯定也会停止继续枚举。

int[] arr1 = {10, 1, 2, 3, 4, 5};

IEnumerable<int> query = arr1.TakeWhile(Compare);

这样query中只包含10一个结果。这是因为当枚举到1返回了false,TakeWhile停止了对集合的枚举。

同样,通过Take操作,可以查询出类似SQL数据库中Top关键字的结果。如果想每次取出集合中的N个元素,我们可以arr1.Take(i*N).Except(arr1.Take((i-1)*N)。

4、Skip、SkipWhile :Skip返回从数据源中跳过某元素后的集合。

    SkipWhile需要通过委托来用于测试每个元素是否满足条件的函数。MSDN给出的解释如下:

【只要满足指定的条件,就跳过序列中的元素,然后返回剩余元素。

通过使用延迟执行实现 SkipWhile<(Of <(TSource>)>)(IEnumerable<(Of <(TSource>)>), Func<(Of <(TSource, Boolean>)>)) 方法。即时返回值为一个对象,该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach(或 Visual Basic 中的 For Each)来枚举该对象时,才执行此方法表示的查询。

此方法使用 predicate 测试 source 的每个元素,如果结果为 true,则跳过该元素。谓词函数针对一个元素返回 false 后,则生成该元素及 source 中的剩余元素,并且不再调用 predicate。

如果 predicate 为序列中的所有元素返回 true,则返回一个空 IEnumerable<(Of <(T>)>)。】

注意:同TakeWhile一样,对集合中的元素进行枚举时,如果返回True则跳过此元素。如果返回False,则返回从返回False的元素开始到集合的剩余元素。即返回False时停止了对集合的枚举。如果集合中的每个元素都返回True则返回一个空的集合

如: int[] arr1 = {10, 1, 2, 3, 4, 5};var query1 = arr1.SkipWhile(n => n > 9);
            foreach ( var item in query1)
            {
                Console.WriteLine(item);
            }

输出为:1, 2, 3, 4, 5。

5、Lambda表达式

    Lambda是一个匿名函数,可以包含表达式或者语句块。它都是用Lambda运算符“=>”。念做“goes to”。如上述TakeWhile、SkipWhile都是用了  n => n > 9 Lambda表达式。在arr1.SkipWhile(n => n > 9)中,体会是n就是arr1中某一个元素,只是编译器会根据arr1定义的类型识别匿名参数n的类型。


 

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
如何找出DHCP地址池里未使用的IP地址
如何找出DHCP地址池里
国内常用的DNS列表
国内常用的DNS列表
Linux邮件服务器软件比较
Linux邮件服务器软件比
学用纯CSS打造可折叠树状菜单
学用纯CSS打造可折叠树
相关文章
栏目更新
栏目热门