zoukankan      html  css  js  c++  java
  • Linq之 推迟查询 VS 立即查询

      

    推迟查询(也叫:延迟查询等):总之它的大概意思是指“在运行定义查询期间,查询不会执行而在迭代数据项时运行”{网上理解:不是在查询创建的时候执行,而是在遍历的时候执行}……

    那么为什么会出现这样的情况?

    看看《C#高级编程》怎么解释的?

    -->扩展方法 Where(),它使用 yield  return 语句返回谓词为 true 的元素。因为使用了 yield  return 语句,所以编译器会创建一个枚举器,在访问枚举中的项后,就返回它们………………

    public static IEnumerable<T> Where<T>(this IEnumerable<T> source, 
    Func<T, bool> predicate) 
    { 
    foreach (T item in source) 
    if (predicate(item)) 
    yield return item; 
    } 

     

    推迟查询

                //推迟查询的执行 
                List<string> names = new List<string> { "Tom", "Jack", "Bily", "Kala", "Brusy" ,"Mike"};
                var nameWithM = from n in names where n.StartsWith("M") orderby n select n;
                Console.WriteLine("第一次查询……");
                foreach (var item in nameWithM)
                {
                    Console.WriteLine(item);
                }
                names.Add("Majo");
                names.Add("Meke");
                names.Add("Mzmi");
                names.Add("Dapi");
                Console.WriteLine("第二次查询……");
                foreach (var item in nameWithM)
                {
                    Console.WriteLine(item);
                }

    得出的结果:

    立即查询

     IList<string> iNameWithM = (from n in names where n.StartsWith("M") orderby n select n).ToList();
                Console.WriteLine("第一次查询ToList……");
                foreach (var item in iNameWithM)
                {
                    Console.WriteLine(item);
                }
                names.Add("Majo");
                names.Add("Meke");
                names.Add("Mzmi");
                names.Add("Dapi");
                Console.WriteLine("第二次查询ToList……");
                foreach (var item in iNameWithM)
                {
                    Console.WriteLine(item);
                }

    得出结果

    使用这些“。调用扩展方法ToArray()、ToEnumerable()、ToList()等” 可以实现立即执行效果

     



    作者:PEPE
    出处:http://pepe.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    nginx反向代理配置去除前缀
    centos6.x yum源站失效
    Shell if 条件判断
    使用Shell显示脚本使用帮助
    libmysqlclient.so.20 错误问题解决
    linux中ldconfig的使用介绍
    【源码解读】Vue与ASP.NET Core WebAPI的集成
    【Golang】快速复习指南QuickReview(十一)——数据库访问(MySql为例)
    【Golang】快速复习指南QuickReview(十)——goroutine池
    【Golang】快速复习指南QuickReview(九)——socket
  • 原文地址:https://www.cnblogs.com/PEPE/p/2605250.html
Copyright © 2011-2022 走看看