为了能让初学者更快速地掌握,在系列文章中,我尽可能地避开理论讲解,一则对于入门者来说,过多的理论叙述反而会降低大家学习编程的兴趣,二则,官方文档的资料很详细,我说了也是废话。因此,我会尽可能地多举些简单的例子,让初学者能够看得懂,呵呵,当然了,学习LINQ,还得有一定C#语法基础。
上一篇文章中我们讨论了最简单的LINQ语法,也是最基本的语法和表达式编写结构,本文我们就来谈一谈几个重要的概念。
一、查询三步曲。
创建和使用LINQ,有三个必备的步骤:
1、Get——数据从哪里来?得到数据源;
2、Create——创建查询表达式,这是核心;
3、Execute——执行查询,并得到相应结果。
好的,我们下面按照这三步来做一个练习。
1、数据源,可以来自于数据库,XML,这里我们手动创建一个数组。
  1. string[] arrSource = new string[]
  2. "turn", "sou", "tao", "mar", "ate", "leee", "data", "em"
  3. ;

2、创建查询,我们来写一个LINQ表达式,把上面字符串数组中包含字母“t ”的都筛选出来。

  1. IEnumerable<string> result =
  2. from s in arrSource
  3. where s.Contains("t")
  4. select s;

3、执行查询,把结果输出到“输出窗口”中。

  1. // 执行
  2. Debug.WriteLine("\n包含“t”的字符串有:");
  3. foreach (string item in result)
  4. {
  5. Debug.Write("  " + item);
  6. }

运行一下程序,你会看到以下结果。

  1. 包含“t”的字符串有:
  2. turn  tao  ate  data

呵呵,怎么样?找到感觉了没?不要紧张,再练一个。

1、数据源。

  1. int[] mySource = new int[] { 26, 38, 17, 21, 55, 88, 120, 107, 67, 18, 29, 30 };

2、创建查询。把里面的偶数筛选出来。

  1. IEnumerable<int> resInt =
  2. from n in mySource
  3. where n % 2 == 0
  4. select n;

3、执行查询。

  1. Debug.WriteLine("数组中是偶数的:");
  2. foreach (int nn in resInt)
  3. {
  4. Debug.Write("  " + nn.ToString());
  5. }

最终,我们得到以下结果。

  1. 数组中是偶数的:
  2. 26  38  88  120  18  30

二、延迟执行。

你一定会问,LINQ表达式是在什么时候执行呢?在声明查询变量时,还是在foreach循环中?好,我们一起来探索一下。

LINQ一般是延迟执行,也就是说,到了foreach的时候才被执行,如果要强制执行,可以调用ToArray等方法,如。

  1. int[] newValues = resInt.ToArray();

这个,很难通过断点调试去证实,因为当你在单步跟入时,为了预览结果视图,VS已经提前执行了。因此,这个概念我们参阅一下MSDN就可以了,也不属于很重要的内容,重要的我们知道怎么用它。

下面这张图片来自微软官方文档,它展示了LINQ的整个执行过程。

LINQ简记(2):重要概念的更多相关文章

  1. LINQ简记(1):基本语法

    关于LINQ(语言集成查询)是.NET 3.5和Visual Studio 2008以上版本中引入的一种有趣的全新概念,语言版本有VB和C#,由于C#与.NET平台结合最为紧密,也是MS当初首推的语言 ...

  2. LINQ简记(3):子句

    LINQ查询表达式的子句如select,where,from等都是比较简单的子句,相信各位多练习练习,再结合MSDN的例子,基本上是可以理解的,因此,本文只挑几个有代表性的,以及有些难理解的子句来简述 ...

  3. LINQ to XML 编程基础

    1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: 隐藏行号 复制代码 ?创建 XML public static void CreateDocumen ...

  4. Linq世界走一走(LINQ TO XML)

    前言:Linq to xml是一种使用XML的新方法.从本质上来说,它采用了多种当前使用的XML处理技术,如DOM和XPath,并直接在.NET Framework内将它们组合为一个单一的编程接口.L ...

  5. Asp.net之LINQ入门视频教程

    当前位置: 主页 > 编程开发 > Asp.net视频教程 > Asp.net之LINQ入门视频教程 > http://www.xin1234.com/Program/Aspn ...

  6. LINQ to XML LINQ学习第一篇

    LINQ to XML LINQ学习第一篇 1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: public static void CreateDoc ...

  7. 查询表达式和LINQ to Objects

    查询表达式实际上是由编译器“预处理”为“普通”的C#代码,接着以完全普通的方式进行编译.这种巧妙的发式将查询集合到了语言中,而无须把语义改得乱七八糟 LINQ的介绍 LINQ中的基础概念 降低两种数据 ...

  8. 状态机/迭代器/LINQ/协程

    状态机 有限状态机(Finite State Machine 或 Finite State Automata)是软件领域中一种重要的工具. 状态机允许一个对象在其内部状态改变时改变它的行为.对象内部状 ...

  9. 1、ASP.NET MVC入门到精通——新语法

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 在学习ASP.NET MVC之前,有必要先了解一下C#3.0所带来的新的语法特性,这一点尤为重要,因为在MVC项目中我们利用C#3.0的新特 ...

随机推荐

  1. common upload乱码

    request.setCheracterEncoding("utf-8"); DiskFileUpload.setHeaderEncoding("utf-8") ...

  2. bzoj 1022 小约翰的游戏John

    题目大意: n堆石子,两个人轮流取石子,每个人取的时候,可以随意选择一堆石子 在这堆石子中取走任意多的石子,但不能一粒石子也不取,取到最后一粒石子的人算输 思路: 首先当每堆石子数都为1时,偶数为先手 ...

  3. P2597 [ZJOI2012]灾难 拓扑排序

    这个题有点意思,正常写法肯定会T,然后需要优化.先用拓扑排序重构一遍树,然后进行一个非常神奇的操作:把每个点放在他的食物的lca上,然后计算的时候直接dfs全加上就行了.为什么呢,因为假如你的食物的l ...

  4. poj3463 Sightseeing——次短路计数

    题目:http://poj.org/problem?id=3463 次短路计数问题,在更新最短路的同时分类成比最短路短.长于最短路而短于次短路.比次短路长三种情况讨论一下,更新次短路: 然而其实不必被 ...

  5. QT Creater环境搭建

    需要的软件包: 1.qt-win-opensource-4.8.5-mingw.exe //Qt库 2.MinGW-gcc440_1.zip //QT编译器 3.qt-creator-opensour ...

  6. 使用psutil模块获取电脑运行信息

    psutil是python的一个用于获取cpu信息的模块,非常好使,以下附上官方的一些example: CPU-> Examples >>> import psutil > ...

  7. Vue.js经典开源项目汇总-前端参考资源

    Vue.js经典开源项目汇总 原文链接:http://www.cnblogs.com/huyong/p/6517949.html Vue是什么? Vue.js(读音 /vjuː/, 类似于 view) ...

  8. C# System.Environment.GetFolderPath的使用 [转]

    原文:https://blog.csdn.net/yongyong521/article/details/75105853 获取系统文件目录 string strPath = Environment. ...

  9. 【洛谷3546_BZOJ2803】[POI2012]PRE-Prefixuffix(String Hash)

    Problem: 洛谷3546 Analysis: I gave up and saw other's solution when I had nearly thought of the method ...

  10. ACM_lowbit

    lowbit Time Limit: 2000/1000ms (Java/Others) Problem Description: long long ans = 0; for(int i = 1; ...