您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“LINQ是什么及怎么使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“LINQ是什么及怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
要理解為什么使用LINQ,先來看下面一個例子。假設有一個整數類型的數組,找到里面的偶數并進行降序排序。
在C#2.0以前,如果要實現這樣的功能,我們必須使用'foreach'或'for'循環來遍歷數組,先找到偶數然后在降序排序,相關代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LinqOfSelectOperation { class Program { static void Main(string[] args) { // 查詢出數組中的偶數并排序 int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 }; // 定義一個整數類型的集合,用來存放數組中的偶數 List<int> list = new List<int>(); // 遍歷數組查詢出偶數放到集合中 foreach (int i in ints) { // 如果是偶數,把偶數加入到集合中 if (i % 2 == 0) { list.Add(i); } } // 正序排序 list.Sort(); // 反轉 list.Reverse(); // 輸出 Console.WriteLine(string.Join(",",list)); Console.ReadKey(); } } }
使用for循環很麻煩,而且不可維護和可讀。C#2.0引入了delegate,可以使用委托來處理這種場景,代碼如下圖所示:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LinqOfSelectOperation { // 定義委托 delegate bool FindEven(int item); class IntExtension { public static int[] where(int[] array, FindEven dele) { int[] result=new int[5]; int i = 0; foreach (int item in array) { if (dele(item)) { result[i]=item; i++; } } return result; } } class Program { static void Main(string[] args) { // 查詢出數組中的偶數并排序 int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 }; //delegate(int item){return item % 2 == 0;}表示委托的實現 List<int> list = IntExtension.where(ints, delegate(int item) { return item % 2 == 0; }).ToList(); // 正序排序 list.Sort(); // 反轉 list.Reverse(); // 輸出 Console.WriteLine(string.Join(",", list)); Console.ReadKey(); } } }
所以,有了C#2.0,通過使用委托有了代理的優勢,不必使用for循環來查詢不同條件的數組。例如你可以使用相同的委托來查找數組中的奇數,并降序排序輸出,代碼如下圖所示:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LinqOfSelectOperation { // 定義委托 delegate bool FindEven(int item); class IntExtension { public static int[] where(int[] array, FindEven dele) { int[] result=new int[3]; int i = 0; foreach (int item in array) { if (dele(item)) { result[i]=item; i++; } } return result; } } class Program { static void Main(string[] args) { // 查詢出數組中的奇數并排序 int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 }; //delegate(int item){return item % 2 != 0;}表示委托的實現 List<int> list = IntExtension.where(ints, delegate(int item) { return item % 2 != 0; }).ToList(); // 正序排序 list.Sort(); // 反轉 list.Reverse(); // 輸出 Console.WriteLine(string.Join(",", list)); Console.ReadKey(); } } }
雖然使用delegate可以使程序的可讀性增加了,但是C#團隊認為他們仍然需要使代碼更加緊湊和可讀,所以他們在C#3.0中引入了擴展方法、Lambda表達式、匿名類型等新特性,你可以使用C#3.0的這些新特性,這些新特性的使用LINQ的前提,可以用來查詢不同類型的集合,并返回需要的結果。
下面的示例演示了如何使用LINQ和Lambda表達式根據特定條件來查詢數組,示例代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LinqOfSelectOperation { class Program { static void Main(string[] args) { // 查詢出數組中的奇數并排序 int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 }; // 使用LINQ和Lambda表達式查詢數組中的偶數 int[] intEvens= ints.Where(p => p % 2 == 0).ToArray(); // 使用LINQ和Lambda表達式查詢數組中的奇數 int[] intOdds = ints.Where(p => p % 2 != 0).ToArray(); // 輸出 Console.WriteLine("偶數:" + string.Join(",", intEvens)); Console.WriteLine("奇數:" + string.Join(",", intOdds)); Console.ReadKey(); } } }
在上面的例子中可以看到,我們在單個語句中使用LINQ和Lambda表達式指定不同的查詢條件,因此,LINQ使代碼更加緊湊和可讀,并且它也可以用于查詢不同的數據源。看到這里的時候,你可能會問:究竟什么是LINQ呢?下面將會具體講解什么是LINQ。
長期以來,開發社區形成以下的格局:
C#中字符串用string數據類型表示。
SQL中字符串用NVarchar/Varchar/Char數據類型表示。
沒有智能感知效果。
沒有嚴格意義上的強類型和類型檢查。
上面描述的問題,都可以使用LINQ解決,那么究竟什么是LINQ呢?
LINQ(Language Integrated Query)即語言集成查詢。
LINQ是一組語言特性和API,使得你可以使用統一的方式編寫各種查詢。用于保存和檢索來自不同數據源的數據,從而消除了編程語言和數據庫之間的不匹配,以及為不同類型的數據源提供單個查詢接口。
LINQ總是使用對象,因此你可以使用相同的查詢語法來查詢和轉換XML、對象集合、SQL數據庫、ADO.NET數據集以及任何其他可用的LINQ提供程序格式的數據。
LINQ主要包含以下三部分:
1、LINQ to Objects 主要負責對象的查詢。
2、LINQ to XML 主要負責XML的查詢。
3、LINQ to ADO.NET 主要負責數據庫的查詢。
LINQ to SQL
LINQ to DataSet
LINQ to Entities
1、熟悉的語言:開發人員不必為每種類型的數據源或數據格式學習新的語言。
2、更少的編碼:相比較傳統的方式,LINQ減少了要編寫的代碼量。
3、可讀性強:LINQ增加了代碼的可讀性,因此其他開發人員可以很輕松地理解和維護。
4、標準化的查詢方式:可以使用相同的LINQ語法查詢多個數據源。
5、類型檢查:程序會在編譯的時候提供類型檢查。
6、智能感知提示:LINQ為通用集合提供智能感知提示。
7、整形數據:LINQ可以檢索不同形狀的數據。
讀到這里,這篇“LINQ是什么及怎么使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。