1、理解LINQ;
2、能寫得復雜的LINQ語句(比如:動態查詢);
3、理解表達式樹及相關概念;
4、熟練運用LINQ寫出優美的代碼(希望一起努力,最終達到);
LINQ之爭的銷煙已經退去,如今,LINQ已經成為C#開發人必備技術之一。很多人用它寫出了優美的代碼,它已經成為處理數據的一種全新開發方式,這也許是你選擇.NET作為開發平台的福利之一。越來越多的開源庫、框架都大量地使用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會給我們帶來如下好處:
1、集成化,它把查詢封裝成C#(VB.NET)語法,獲取了跟別的C#(VB.NET)語法一樣的,高亮顯示、類型檢查。
2、使用查詢邏輯更加清晰。
3、使用統一的查詢語法處理內存對象、數據庫、XML等數據源中的數據;
4、提高了開發速度(上面的LINQ TO SQL示例);
5、提高代碼的可維護性、可擴展性(後面會介紹);
別外,LINQ TO SQL可以有效的防止SQL注入,從來提高的系統的安全性。今天不早了,先洗洗睡了以防觸死。如果對你有幫助,請點推薦支持,增加後面寫作動力。如果有什麼不當之處,再次懇請指正。