zoukankan      html  css  js  c++  java
  • Linq 那些事儿

    今天突然好奇当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 = 0; i < 10; i++)
                {
                    lstTestLinq.Add(new TestLinq() { Number = i });
                }
                var test = from c in lstTestLinq where c.Number < 8 select c;            
                Console.ReadKey();
            }
        }

     效果如下:

    没有看见Console.WriteLine任何值,这样可以看出如果仅仅是定义了linq代码,但是没有去使用的时候,这段linq代码是不会执行的

    继续看代码:

     class Program
        {
            static void Main(string[] args)
            {
                List<TestLinq> lstTestLinq = new List<TestLinq>();
                for (int i = 0; i < 10; i++)
                {
                    lstTestLinq.Add(new TestLinq() { Number = i });
                }
                var test = from c in lstTestLinq where c.Number < 8 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 = 0; i < 10; i++)
                {
                    lstTestLinq.Add(new TestLinq() { Number = i });
                }
                var test = from c in lstTestLinq where c.Number < 8 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 = 0; i < 10; i++)
                {
                    lstTestLinq.Add(new TestLinq() { Number = i });
                }
                var test = from c in lstTestLinq where c.Number < 8 select c;
                test.Skip(2).Take(1);
                Console.ReadKey();
            }
        }

    效果图

    发现也是没有执行

    下面我们在看其他方法,比如 AsQueryable()和AsEnumerable()方法

    效果也是一样

    新人第一次写博客,深知新人的迷惑,下一篇我们看看EF操作数据库是不是真的如传说中的那么烂。

    新人的QQ群165609857

  • 相关阅读:
    bzoj 1853: [Scoi2010]幸运数字 容斥
    bzoj 3545&&3551: [ONTAK2010]Peaks &&加强版 平衡树&&并查集合并树&&主席树
    bzoj 2331: [SCOI2011]地板 插头DP
    bzoj 3669: [Noi2014]魔法森林 动态树
    bzoj 2734: [HNOI2012]集合选数 状压DP
    bzoj 3751: [NOIP2014]解方程 同余系枚举
    bzoj 2594: [Wc2006]水管局长数据加强版 动态树
    bzoj 2049: [Sdoi2008]Cave 洞穴勘测 动态树
    bzoj 2209: [Jsoi2011]括号序列 splay
    bzoj 1223: [HNOI2002]Kathy函数 数位DP 高精度
  • 原文地址:https://www.cnblogs.com/shaomingrui/p/LinqToObject.html
Copyright © 2011-2022 走看看