关闭

LINQ中延时执行的Enumerable类方法成员

发表于:2012-11-23 09:52

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:DebugLZQ    来源:51Testing软件测试网采编

  Enumerable的扩展方法采用线性流程,每个运算法会被线性执行。这种执行方法如果操作类似关系型数据库数据源,效率会非常低下,所以Queryable重新定义这些扩展方法,把LINQ表达式拆解为表达式树,提供程序就可以根据表达式树生成关系型数据库的查询语句,即SQL命令,然后进行相关操作。

  每个查询运算符的执行行为不同,大致分为立即执行和延时执行。延时执行的运算符将在枚举元素的时候被执行。

  Enumerable类位于程序集System.Core.dll中,System.Linq命名空间下,并且直接集成自System.Object,存在于3.5及以上的.NET框架中。Enumerable是静态类,不能实例化和被继承,其成员只有一组静态和扩展方法。

  LINQ不仅能够查询实现IEnumerable<T>或IQueryable<T>的类型,也能查询实现IEnumerable接口的类型。关于Enumerable方法的详细说明,请参考MSDN  Enumerable 类

  理解LINQ首先必须理解扩展方法

  msdn是这样规定扩展方法的:“扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。”

  下面给个扩展方法的例子如下:

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Text; 
  5. namespace 扩展方法 
  6.     /// <summary> 
  7.     /// 为string类型定义一个扩展方法 
  8.     /// </summary> 
  9.     static class Helper 
  10.     {  
  11.         public static string MyExtenMethod(this string s) 
  12.         { 
  13.             return s.Substring(0, 2); 
  14.         } 
  15.     } 
  16.     class Program 
  17.     { 
  18.         static void Main(string[] args) 
  19.         { 
  20.             string s = "扩展方法示例"
  21.             Console.WriteLine(s.MyExtenMethod());//调用 
  22.             Console.ReadKey(false); 
  23.         } 
  24.     } 
  25. }

  程序的运行结果如下:

  -----插曲,想到了就加进来,有助于理解开头的几段话及LINQ原理

  ---------------------------------------------------------------”

  为了方便理解和记忆,DebugLZQ将常用的延时执行的Enumerable类方法成员分了下组,具体如下:

  1、Take用于从一个序列的开头返回指定数量的元素

  2、TakeWhile 用于获取指定序列从头开始符合条件的元素,直到遇到不符合条件的元素为止

61/6123456>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号