今天突然好奇当linq进行循环遍历的时候,如果满足条件的时候还会不会继续循环剩余的数据,做了个小实验。

首先看看上代码

这个是测试的类

public class TestLinq
{
int _Number; public int Number
{
get
{
Console.WriteLine("读取Number" + _Number);//这里是为了测试看看是否读取了number值
return _Number;
}
set { _Number = value; }
}
}
首先看看直接使用linq遍历list是什么样的。
代码如下:
class Program
{
static void Main(string[] args)
{
List<TestLinq> lstTestLinq = new List<TestLinq>();
for (int i = ; i < ; i++)
{
lstTestLinq.Add(new TestLinq() { Number = i });
}
var test = from c in lstTestLinq where c.Number < select c;
Console.ReadKey();
}
}

效果如下:

没有看见Console.WriteLine任何值,这样可以看出如果仅仅是定义了linq代码,但是没有去使用的时候,这段linq代码是不会执行的

继续看代码:

 class Program
{
static void Main(string[] args)
{
List<TestLinq> lstTestLinq = new List<TestLinq>();
for (int i = ; i < ; i++)
{
lstTestLinq.Add(new TestLinq() { Number = i });
}
var test = from c in lstTestLinq where c.Number < select c;
test.ToList();
Console.ReadKey();
}
}

效果图:

我们看到linq读取了所有的数据,加了一句ToList后linq确确实实的执行了如果我换成了ToArray效果也和ToList()一样,如果我只想取一条数据,那么linq会遍历所有的么,继续看

class Program
{
static void Main(string[] args)
{
List<TestLinq> lstTestLinq = new List<TestLinq>();
for (int i = ; i < ; i++)
{
lstTestLinq.Add(new TestLinq() { Number = i });
}
var test = from c in lstTestLinq where c.Number < select c;
test.First();
Console.ReadKey();
}
}

效果如下

下面我们继First或FirstOrDefault方法会让linq执行,那么skip和take呢,继续试。

class Program
{
static void Main(string[] args)
{
List<TestLinq> lstTestLinq = new List<TestLinq>();
for (int i = ; i < ; i++)
{
lstTestLinq.Add(new TestLinq() { Number = i });
}
var test = from c in lstTestLinq where c.Number < select c;
test.Skip().Take(1);
Console.ReadKey();
}
}

效果图

发现也是没有执行

下面我们在看其他方法,比如 AsQueryable()和AsEnumerable()方法

效果也是一样

新人第一次写博客,深知新人的迷惑,下一篇我们看看EF操作数据库是不是真的如传说中的那么烂。

新人的QQ群165609857

Linq 那些事儿的更多相关文章

  1. MVC之前的那点事儿系列(7):WebActivator的实现原理详解

    文章内容 上篇文章,我们分析如何动态注册HttpModule的实现,本篇我们来分析一下通过上篇代码原理实现的WebActivator类库,WebActivator提供了3种功能,允许我们分别在Http ...

  2. 传说中的WCF(2):服务协定的那些事儿

    上一篇文章中,我们抛出了N个问题:WCF到底难不难学?复杂吗?如果复杂,可以化繁为简吗? 其实,这些问题的答案全取决于你的心态,都说“态度决定一切”,这句话,不知道各位信不信,反正我是信了.首先,敢于 ...

  3. 关于Action返回结果类型的事儿(下)

    原文:关于Action返回结果类型的事儿(下) using System;  using System.Collections.Generic;  using System.Linq;  using ...

  4. Linq to Sql:N层应用中的查询(上) : 返回自定义实体

    原文:Linq to Sql:N层应用中的查询(上) : 返回自定义实体 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候,我们使 ...

  5. [转] 传说中的WCF(2):服务协定的那些事儿

    上一篇文章中,我们抛出了N个问题:WCF到底难不难学?复杂吗?如果复杂,可以化繁为简吗? 其实,这些问题的答案全取决于你的心态,都说“态度决定一切”,这句话,不知道各位信不信,反正我是信了.首先,敢于 ...

  6. Docker+.Net Core 的那些事儿-2.创建Docker镜像

    1.从store.docker.com获取.net core镜像 docker pull microsoft/dotnet 2.创建一个.net core项目,并发布 在上篇文章结尾建立的工作目录下, ...

  7. C#中的依赖注入那些事儿

    目录 目录 1 IGame游戏公司的故事 1.1 讨论会 1.2 实习生小李的实现方法 1.3 架构师的建议 1.4 小李的小结 2 探究依赖注入 2.1 故事的启迪 2.2 正式定义依赖注入 3 依 ...

  8. Linq中DeferredLoadingEnabled,DataLoadOption的用法

    1.  基本的数据关系图 Student和Class之间是多对一关系,Student和Course之间是多对多关系. DataContext的DeferredLoadingEnabled属性指定是否需 ...

  9. linq深入

    一.匿名类:[ C# 3.0/.NET 3.x 新增特性 ] 1.1 不好意思,我匿了 在开发中,我们有时会像下面的代码一样声明一个匿名类:可以看出,在匿名类的语法中并没有为其命名,而是直接的一个ne ...

随机推荐

  1. 解决浏览器Adobe Flash Player不是最新版本问题

    关键:选择谷歌浏览器的PPAPI版本的flash下载直接安装即可 搜索: Adobe Flash Player PPAPI 下载地址: http://www.wmzhe.com/soft-30259. ...

  2. SpringMVC中如何在网站启动、结束时执行代码(详细,确保可用)

        在一个网站启动.结束时,我们经常有些操作是需要执行的. 熟悉Asp.net的朋友,使用Global.asax很容易就搞定,在其中有Application_Start和Application_E ...

  3. JS 原型链

    之前对JS的prototype知识比较模糊,今天理清了记下来,以防忘记,直切正题: 1.要明白原型链,就必须先清楚JS的构造函数模式: js是面向对象的语言,既然是面型对象,就一定会有一个对象的模板, ...

  4. ExtJS 中类的继承

    ExtJS 允许对现有的类进行扩展,其扩展可以通过继承来实现.接下来我们就对刚刚使用ExtJS定义的Person类进行继承,定义一个Developer类,它继承自Person,同时还拥有Coding方 ...

  5. maven权威指南学习笔记(五)—— POM

    1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...

  6. 函数式编程之柯里化(curry)

    函数式编程curry的概念: 只传递给函数一部分参数来调用函数,然后返回一个函数去处理剩下的参数. var add = function(x) { return function(y) { retur ...

  7. 【转】C/S,B/S区别

    C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势. ...

  8. Kafka replication

    Kafka replication kafka_replication_detailed_design_v2.pdf kafka Detailed Replication Design V3 Apac ...

  9. Code Lock[HDU3461]

    Code LockTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Subm ...

  10. maven中把依赖的JAR包一起打包

    <buizld> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId ...