为了能让初学者更快速地掌握,在系列文章中,我尽可能地避开理论讲解,一则对于入门者来说,过多的理论叙述反而会降低大家学习编程的兴趣,二则,官方文档的资料很详细,我说了也是废话。因此,我会尽可能地多举些简单的例子,让初学者能够看得懂,呵呵,当然了,学习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. 2014年最简单、快捷的美股Scottrade开户攻略

    [开篇重点提示] 1.scottrade是国内用户用得最多的美股证券交易平台. 2.不用邮寄纸质资料,网上开户全搞定. 3.申请表格填写优惠代码,获取免费3次交易费用,鄙人的推荐优惠代码是 87195 ...

  2. JS高级技巧学习小结

    安全类型检測 var isArray = value instanceof Array; 以上代码要返回true,value必须是一个数组,并且还必须与Array构造函数在同一个全局作用域中(Arra ...

  3. 【转】获取Android控件的宽和高

    我们都知道在onCreate()里面获取控件的高度是0,这是为什么呢?我们来看一下示例: 首先我们自己写一个控件,这个控件非常简单: public class MyImageView extends ...

  4. P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper 状压dp

    这个状压dp其实很明显,n < 18写在前面了当然是状压.状态其实也很好想,但是有点问题,就是如何判断空间是否够大. 再单开一个g数组,存剩余空间就行了. 题干: 题目描述 A little k ...

  5. 03、HelleBaiduMap

    D:\百度地图\百度地图\资料\百度地图与定位SDK\百度地图v3.5.0\BaiduMap_AndroidSDK_v3.5.0_All\BaiduMap_AndroidSDK_v3.5.0_Docs ...

  6. PCB MS SQL 存储过程(CLR) 实现Json转DataTable表的方法

    一.准备需转为DataTable的json字符串 原json字符串数据 [{"TechName":"ECN","TechNo":" ...

  7. Java一维数组二维数组详解API

    所谓数组,是有序的元素序列. 若将有限个类型相同的变量的集合命名,那么这个名称为数组名.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用于区分数组的各个元素的数字编号称为下标 ...

  8. Fib(兔子问题)python实现多种方法

    # 斐波那契数列是学计算机入门最经典的一道题目 # 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci) # ...

  9. UIPickerView的应用

    UIPickerView 是一个选择器控件, 它可以生成单列的选择器,也可生成多列的选择器.UIPickerView 直接继承了 UIView ,没有继承 UIControl ,因此,它不能像 UIC ...

  10. [ NOIP 2002 ] TG

    \(\\\) \(\#A\) 均分纸牌 有\(N\)堆纸牌,每堆有若干张,但纸牌总数必为\(N\)的倍数.可以在任一堆上取若干张纸牌,然后移动给其左右任意一侧的纸牌堆,求将所有的牌堆牌数都变为平均值最 ...