Linq 那些事儿_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > Linq 那些事儿

Linq 那些事儿

 2014/8/20 19:05:15  邵明瑞  程序员俱乐部  我要评论(0)
  • 摘要:今天突然好奇当linq进行循环遍历的时候,如果满足条件的时候还会不会继续循环剩余的数据,做了个小实验。首先看看上代码这个是测试的类publicclassTestLinq{int_Number;publicintNumber{get{Console.WriteLine("读取Number"+_Number);//这里是为了测试看看是否读取了number值return_Number;}set{_Number=value;}}}首先看看直接使用linq遍历list是什么样的。代码如下
  • 标签:那些事儿

今天突然好奇当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

发表评论
用户名: 匿名