首页 > 技术文章 > Linq的延迟

chucklu 2015-07-07 15:25 原文

书名:LINQ: The Future of Data Access in C# 3.0
Learn LINQ and the C# 3.0 Features That Support It

http://shop.oreilly.com/product/9780596528416.do

 

具体的章节链接https://books.google.com/books?id=Q9SnY-8_iasC&pg=PA16&lpg=PA16&dq=Now+use+dump+in+a+simple+query+that+will+end+up+selecting+all+the+doctors+because+the+function+always+returns+true&source=bl&ots=IpUtNYn0d1&sig=W0-uCKgaXBh-5rX0QJz0BXLg5l8&hl=zh-CN&sa=X&ei=s3abVYGBL4bkUri_g5AL&ved=0CCAQ6AEwAA#v=onepage&q=Now%20use%20dump%20in%20a%20simple%20query%20that%20will%20end%20up%20selecting%20all%20the%20doctors%20because%20the%20function%20always%20returns%20true&f=false

准确的链接https://books.google.com/books?id=Q9SnY-8_iasC&printsec=frontcover&hl=zh-CN#v=onepage&q&f=false

 

可以使用google books downloader进行下载

 

http://www.cnblogs.com/czx1/p/4947855.html

在LINQ中,一个重要的特性就是延迟加载,是指查询操作并不是在查询运算符定义的时候执行,而是在真正使用集合中的数据时才执行(如:在遍历集合时调用MoveNext方法时)。

下面是一个简单的实例:

  var num = new List<int>();
            num.Add(1);
            IEnumerable<int> query = num.Select(n => n * 10);
            num.Add(2);
            foreach (int n in query)
                Console.WriteLine(n);

结果输出10   20.

在上面的例子中,在创建查询语句后又向集合中加入新元素,这个新元素最终也出现在查询结果中。这就是因为查询语句是在遇到foreach之后才真正执行的

 

 

再例如:

   Action a = () => Console.WriteLine("Foo");
            //没有在控制台输出任何内容
            a();
            //延迟执行,输出Foo

 

推荐阅读