zoukankan      html  css  js  c++  java
  • 黄聪:3.Linq推迟查询的执行(原创)

    大家都知道Linq在运行期间定义查询表达式的时候,查询是不会运行的.而是会在迭代数据的时候才运行.

    因此会有下面的情况发生:

    代码
    //-----------------------------------------------------------
    // All Rights Reserved , Copyright (C) 2010 ,黄聪 , Ltd .
    //-----------------------------------------------------------

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication2
    {
    class Program
    {
    static void Main(string[] args)
    {
    List
    <int> list = new List<int> { 1, 2 };

    var nums
    = (from n in list where n < 6 select n);

    Console.WriteLine(
    "第一次遍历:");
    foreach (var n in nums)
    {
    Console.WriteLine(n);
    }

    //添加新数据
    list.Add(3);
    list.Add(
    4);
    list.Add(
    5);

    Console.WriteLine(
    "第二次遍历:");
    foreach (var n in nums)
    {
    Console.WriteLine(n);
    }
    }
    }
    }

    运行结果:

    这里说明在每次迭代的时候,程序都会重新遍历一次list集合,这样我们就能实时检测出数据源的变化.

    但是要注意的是:如果在查询之后调用ToArray(), ToEnumerable(), ToList()等操作的话,

    数据源会重新得到一个新的名称,而第二次遍历将只对这个变了名的数据源进行遍历!!!!

    示例如下:

    代码
    //-----------------------------------------------------------
    // All Rights Reserved , Copyright (C) 2010 ,黄聪 , Ltd .
    //-----------------------------------------------------------

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication2
    {
    class Program
    {
    static void Main(string[] args)
    {
    List
    <int> list = new List<int> { 1, 2 };

    var nums
    = (from n in list where n < 6 select n).ToList();

    Console.WriteLine(
    "第一次遍历:");
    foreach (var n in nums)
    {
    Console.WriteLine(n);
    }

    //添加新数据
    list.Add(3);
    list.Add(
    4);
    list.Add(
    5);

    Console.WriteLine(
    "第二次遍历:");
    foreach (var n in nums)
    {
    Console.WriteLine(n);
    }
    }
    }
    }

    运行结果:

    两次程序只有以下一句是不一样的:

    第一次:

    var nums = (from n in list where n < 6 select n);

    第二次:

    var nums = (from n in list where n < 6 select n).ToList();

    但在结果中可以看出,第两次实验中迭代输出的数都一样,但是数据源的集合list中的值已经改变了~

    相关文章

    1.LinQ初体验 简单的示例(原创)

    2.Linq初体验 Linq2SQL示例(原创)

    3.Linq推迟查询的执行(原创)

    4.Ling初体验 匿名类型在查询表达式中的使用

    5.Linq初级班 标准查询操作符的使用和调用

    6.Linq初级班 Linq To XML体验(编程篇)

    7.Linq初级班 Linq To XML体验(基础篇)

    8.Linq初级班 Linq To XML体验(高级编程篇)

  • 相关阅读:
    顾问和注解
    正则
    GitHub 的简单使用
    JavaScript变态题目
    常用的Javascript设计模式
    HTML5 本地裁剪上传图片
    webpack 打包
    详解js闭包
    常用的Javascript设计模式
    call appiy
  • 原文地址:https://www.cnblogs.com/huangcong/p/1917526.html
Copyright © 2011-2022 走看看