程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 一步一步學LINQ系列1---什麼是LINQ?,linq1---

一步一步學LINQ系列1---什麼是LINQ?,linq1---

編輯:C#入門知識

一步一步學LINQ系列1---什麼是LINQ?,linq1---


一、本系列目標

      1、理解LINQ;

      2、能寫得復雜的LINQ語句(比如:動態查詢);

      3、理解表達式樹及相關概念;

      4、熟練運用LINQ寫出優美的代碼(希望一起努力,最終達到);

二、LINQ為何物?

   LINQ之爭的銷煙已經退去,如今,LINQ已經成為C#開發人必備技術之一。很多人用它寫出了優美的代碼,它已經成為處理數據的一種全新開發方式,這也許是你選擇.NET作為開發平台的福利之一。越來越多的開源庫、框架都大量地使用LINQ。不管是出於提高自身技能還是讀懂別人的代碼,它都得是被你我拿下的一塊石頭。接下來我將向大家介紹它,談談自己的一些認識,如有不恰當的地方歡迎指正。

1、LINQ是什麼?

  一個通用的、語言集成的查詢工具。使用這個工具,可以訪問來自內存對象(LINQ to Objects)、數據庫(LINQ to SQL)、XML文件(LINQ to XML)、文件系統等多種數據源中的數據。它是 Visual Studio 2008 中引入的一組功能,可為 C# 和 Visual Basic 語言語法提供強大的查詢功能,經受了時間的考驗和沉澱。

  下面是查詢內存對象數據源中數據傳統方法和LINQ的寫法:

 

       /// <summary>
        /// 輸出數組中小於5的元素  
        /// </summary>
        public static void RraditionalMethod() {
            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

            //傳統方法使用循環方式
            List<int> lowNums = new List<int>();
            for (int i = 0; i < numbers.Length; i++) {
                if (numbers[i] < 5) {
                    lowNums.Add(numbers[i]);
                }
            }

            Console.WriteLine("Numbers < 5:");
            foreach (var x in lowNums) {
                Console.WriteLine(x);
            }
        }

        /// <summary>
        /// 輸出數組中小於5的元素 
        /// </summary>
        public static void LinqMethod() {
            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

            //LINQ寫法
            var lowNums =
                from num in numbers
                where num < 5
                select num;

            Console.WriteLine("Numbers < 5:");
            foreach (var x in lowNums) {
                Console.WriteLine(x);
            }
        }

     也許你認為,查詢內存對象數據源中數據的LINQ方法沒有給我再來什麼好處(至少從示例來看,代碼數量差不多)。別急!我們來看看數據庫中數據的操作再接著討論,在沒有LINQ之前,我們查詢數據庫(這裡特指關系型數據庫)中的持久化數據時要使用SQL語句,寫代碼時那紅紅(字符串在VS裡的顏色)的SQL語句肯定給你帶來了不少的麻煩吧? 也許是拼寫錯了一個字母,也許是寫錯字母順序、也許……,編譯器確沒有給我們任何的提示。結果就挨了一個運行時異常。在一個復雜的系統裡,解決這個問題花掉幾個小時的時間是很正常的,更糟糕的是同樣的錯誤經常發生!!!但有了LINQ後,我們使用LINQ to SQL,這個麻煩不會再來騷擾你了。請看下面的的示例,看你心動不心動。

        /// <summary>
        /// 查詢訂單編號少於5的訂單號  傳統寫法
        /// </summary>
        /// <param name="connectionString"></param>
        private static void ReadOrderData(string connectionString) {
            string queryString =
                "SELECT * FROM dbo.Orders WHERE OrderID<5;";
            using (SqlConnection connection = new SqlConnection(
                       connectionString)) {
                SqlCommand command = new SqlCommand(
                    queryString, connection);
                connection.Open();
                SqlDataReader reader = command.ExecuteReader();
                try {
                    while (reader.Read()) {
                        Console.WriteLine(String.Format("{0}, {1}",
                            reader[0], reader[1]));
                    }
                }
                finally {
                    // 讀完後關閉對象
                    reader.Close();
                }
            }
        }

 

       /// <summary>
        /// 查詢訂單編號少於5的訂單號  LINQtoSQL寫法
        /// </summary>
        public void ReadOrderDataByLinqToSql() {
            var q =
                from c in db.Orders
                where c.OrderID <5
                select c;
            ObjectDumper.Write(q);
        }

 三、為什麼要使用LINQ

    從上面的對比中我們可以看出,LINQ會給我們帶來如下好處:

    1、集成化,它把查詢封裝成C#(VB.NET)語法,獲取了跟別的C#(VB.NET)語法一樣的,高亮顯示、類型檢查。

           2、使用查詢邏輯更加清晰。

    3、使用統一的查詢語法處理內存對象、數據庫、XML等數據源中的數據;

    4、提高了開發速度(上面的LINQ TO SQL示例);

    5、提高代碼的可維護性、可擴展性(後面會介紹);

    別外,LINQ TO SQL可以有效的防止SQL注入,從來提高的系統的安全性。今天不早了,先洗洗睡了以防觸死。如果對你有幫助,請點推薦支持,增加後面寫作動力。如果有什麼不當之處,再次懇請指正。

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