程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Linq 那些事兒,Linq事兒

Linq 那些事兒,Linq事兒

編輯:C#入門知識

Linq 那些事兒,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




  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved