Linq学习(7) 延迟执行 & 查询非泛型集合

本篇介绍Linq的延迟执行和查询非泛型集合。

延迟执行

从Linq的查询过程看,不断有新类型、集合的构建、释放,感觉效率不高,但Linq的延迟执行机制将大大改善常规操作加载整个数据源导致的效率低下的状况。

示例:

static void Main()
{
  int[] collection = { 10, 11, 12, 13, 14 };
  Console.WriteLine("Begin query collection:" + DateTime.Now);
  var result = from i in collection
         select DoubleInt(i);
  Console.WriteLine("End query collection & Begin output:" + DateTime.Now);
  foreach (var i in result)
  {
    Console.WriteLine("Result:" + i + " Time:" + DateTime.Now.ToString());
  }
  Console.WriteLine("End output:" + DateTime.Now);
}
static int DoubleInt(int i)
{
  Console.WriteLine("The parameter is:" + i);
  Thread.Sleep(1000);
  return i * 2;
}

// 输出为:// Begin query collection:2008-9-12 22:41:50
// End query collection & Begin output:2008-9-12 22:41:50
// The parameter is:10
// Result:20 Time:2008-9-12 22:41:51
// The parameter is:11
// Result:22 Time:2008-9-12 22:41:52
// The parameter is:12
// Result:24 Time:2008-9-12 22:41:53
// The parameter is:13
// Result:26 Time:2008-9-12 22:41:54
// The parameter is:14
// Result:28 Time:2008-9-12 22:41:55
// End output:2008-9-12 22:41:55

时间: 2024-09-20 00:08:30

Linq学习(7) 延迟执行 & 查询非泛型集合的相关文章

编写高质量代码改善C#程序——使用泛型集合代替非泛型集合(建议20)_MsSql

软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和若干集合类.不管是数组还是集合类,它们都有各自的优缺点.如何使用好集合是我们在开发过程中必须掌握的技巧.不要小看这些技巧,一旦在开发中使用了错误的集合或针对集合的方法,应用程序将会背离你的预想而运行. 建议20:使用泛型集合代替非泛型集合 在建议1中我们知道,如果要让代码高效运行,应该尽量避免装箱和拆箱,以及尽量减少转型.很遗憾,在微软提供给我们的第一代集合类型中没有做到这一点,下面我们看ArrayList这个类的使用情况: Array

使用LINQ查询非泛型类型

LINQ能实现查询泛型对象或者实现了IEnumerable接口的对象.然而,诸如ArrayList这样的非泛型集合并没有实现IEnumerable接口.接下来,让我们看看,在这种情况下,如何使用LINQ查询非泛型集合. C# 1public class Cars 2{ 3public string CarMake { get;set;} 4public string CarModel { get; set; } 5public int Year { get; set; } 6} 7 8 9cla

LINQ 的查询执行何时是延迟执行,何时是立即执行,以及查询的复用

问题描述 延迟执行的经典例子:我们用select++i就可以看到在foreach时候,查询才被执行.publicstaticvoidLinq99(){int[]numbers=newint[]{5,4,1,3,9,8,6,7,2,0};inti=0;varq=fromninnumbersselect++i;foreach(varvinq)Console.WriteLine("v={0},i={1}",v,i);}输出结果:v=1,i=1v=2,i=2v=3,i=3v=4,i=4v=5,

对比分析iOS延迟执行的4种方式_IOS

最近学习了延迟执行的几种方法,分享一下: 1.performSelector(NSObject)方法  2.NSTimer方法  3.GCD方法  4.sleep(NSThread)方法 一.performSelector方法: 复制代码 代码如下: [self performSelector:@selector(delayMethod) withObject:nil afterDelay:1.0f]; 1.特点: 此方式要求必须在主线程中执行,否则无效. 是一种非阻塞的执行方式, 暂时未找到取

iOS延迟执行方法详解_IOS

近日学习了延迟执行的几种方法,分享一下. 1.performSelector(NSObject)方法  2.NSTimer方法  3.GCD方法  4.sleep(NSThread)方法 延迟执行代码: - (void)delayDo : (id)sender { NSLog(@"do:%@",sender); } 1.performSelector(NSObject)方法 这是iOS中常用的一种延迟执行方法. 特点:这个方法必须要在主线程中使用.可以传递参数.可以取消操作,不能暂停.

LINQ查询操作符 LINQ学习第二篇

一.投影操作符 1. Select Select操作符对单个序列或集合中的值进行投影.下面的示例中使用select从序列中返回Employee表的所有列: using (NorthwindDataContext db=new NorthwindDataContext()) {     //查询语法     var query =         from e in db.Employees         where e.FirstName.StartsWith("M")       

LINQ to SQL的执行可能无法复用查询计划

查询计划 Sql Server在执行一条查询语句之前都对对它进行"编译 "并生成"查询计划",查询计划告诉Sql Server的查询引擎 应该用什么方式进行工作.Sql Server会根据当前它可以收集到的各种信息(例 如内存大小,索引的统计等等)把一条查询语句编译成它认为"最优 "的查询计划.很显然,得到这样一个查询计划需要消耗CPU资源,而大部 分的查询语句每次经过编译所得到的查询计划往往是相同的,因此除非指定了 RECOMPILE选项,Sq

通过非动态SQL语句在SQL Server中执行动态查询

问题: 我尝试在一个存储过程中传递一系列以逗号划定界限的值,以限制结果集.但是无论什么时候,我在 IN子句中使用变量,都会得到错误信息.是否存在一种不执行动态SQL语句也能完成查询的方式呢? 专家解答: 这里存在一种不执行动态SQL语句也能完成查询的方式,但是首先让我们来探究这个问题.我将在以下 例子中运用AdventureWorks数据库. 在你只有一个值的时候,执行将不会有什么问题. Declare @ManagerIDs Varchar(100) Set @ManagerIDs = '3'

Linq学习笔记

写在前面 其实在09年就已经学习过Linq了,并被她那优美的语法所吸引,只是现在所在的公司还在使用VS2005在.Net2.0的框架下面的开发,所以Linq也很久没有用过了,最近看部门的同事对这个有些兴趣,所以打算整理点东西出来跟大家一起做个分享. 什么是Linq LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性.已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰富的元数据,智能感知.静态类型等强类型语言的好处.并