今天突然好奇当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. CSS中定义CLASS时,中间有空格和没空格的区别是什么?

    .example .pp{ color: orange; } .example.pp2 { color: green; }如上面的两个定义一个是中间有空格,一个是中间没空格. 第一个class要这样写 ...

  2. H5(三)

    Canvas(画布)   基本内容     简单来说,HTML5提供的新元素<canvas>     Canvas在HTML页面提供画布的功能       在画布中绘制各种图形     C ...

  3. Delphi的分配及释放---New/Dispose, GetMem/FreeMem及其它函数的区别与相同

    转载自:http://www.cnblogs.com/qiusl/p/4028437.html?utm_source=tuicool 我估摸着内存分配+释放是个基础的函数,有些人可能没注意此类函数或细 ...

  4. PHPExcel 大数据的导出

    PHPExcel 是一个php语言读取导出数据.导入生成Excel的类库,使用起来非常方便,但有时会遇到以些问题,比如导出的数据超时,内存溢出等. 下面我们来说说这些问题和解决办法. PHPExcel ...

  5. make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl] 错误 1,make: *** [out/host/linux-x86/obj/lib/libESR_Portable.so] 错误 1

    错误3: g++: g++: selected multilib '32' not installed selected multilib '32' not installed make: *** [ ...

  6. ZooKeerper学习之Watcher

    ZooKeeper为我们提供了用于监视结点变化的Watcher机方法制: 1.可以注册Watcher的方法:getData().exists().getChildren().我们可以通过查看ZooKe ...

  7. 解决scrollview和viewpager冲突

    import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; i ...

  8. Xcode显示出错

    warning: control reaches end of non-void function 表示有返回值的函数没有return.

  9. jquery函数理解与运用

    javascript中有多种不用的方式去理解函数,函数类似于我们以前学过的数学函数,但是在程序设计中,我是按照下面的方式进行理解: 函数的理解: 函数是一个代码块,内容被包含在函数内,通常我们是把一些 ...

  10. orcal 操作

    清空表数据(不清除表结构): truncate table 表名