LINQ 語法非常好,但其作用是什么?我們只要查看源數組,就可以看出需要的結果,為什么要查詢這種一眼就能看出結果的數據源呢?有時查詢的結果不那么明顯,在下面的示例中,就創建了一個非常大的數字數組,并用 LINQ 查詢它。
(1)?與以前一樣,創建項目時,Visual Studio ?會自動在Program.cs 中包含 Linq 名稱空間。
using?System;
using?System.Collections.Generic;?
using?System.Linq;
using?System.Text;
(2) 在 Main() 方法中添加如下代碼:
static void Main(string[] args)
{int[] numbers = GenerateLotsOfNumbers(12345678);var?queryResults?=from n in numbers where n < 1000 select n;Console.WriteLine("Numbers less than 1000:"); foreach (var item in queryResults){Console.WriteLine(item);}Console.Write("Program finished, press Enter/Return to continue:"); Console.ReadLine();
}
(3)添加如下方法,生成一個隨機數列表:
private static int[] GenerateLotsOfNumbers(int count)
{Random generator = newRandom(0); int[] result = new int[count]; for (int i = 0; i < count; i++){result[i] = generator.Next();}return?result;
}
(4)編譯并執行程序。結果是一個小于 1000 的數字列表,如下所示:
Numbers less than 1000:
714
24
677
350
257
719
584
Program finished, press Enter/Return to continue:
示例的說明
與前面一樣,第一步是引用 System.Linq 名稱空間,這是在創建項目時由 Visual Studio ?自動引用的:
using?System.Ling;
接著創建一些數據,本例中是創建并調用 GenerateLotsOfNumbers() 方法:
int[] numbers = GenerateLotsOfNumbers(12345678);
private static int[] GenerateLotsOfNumbers(int count)
{Random?generator = new?Random(0);?int[]?result?= new?int[count];?for?(int?i?= 0;?i?<?count;?i++){result[i] = generator.Next();}return result;
}
這不是一個小數據集,數組中有1200萬個數字!需要修改傳送給GenerateLotsOfNumbers() 方法的 size 參數,生成數量不同的隨機數,看看這會對查詢結果有什么景響。這里的 size 參數12 345 678非常大,足以生成一些小于1 000的隨機數,從而獲得為第一個查詢顯示的結果。
數值應隨機分布在有符號的整數范圍內(從 0 到超過 20 億)。用種子值 0 創建隨機數生成器,可以確保每次創建相同的隨機數集合,這是可以重復的,所以會獲得與此處相同的查詢結果,但在嘗試一些查詢之前,并不知道查詢結果是什么。而LINQ 使這些查詢很容易編寫。
查詢語句本身類似于前面用于 names 數組的查詢,也是選擇滿足條件的數字(這里是數字小于1 000):
var?queryResults?=from?n?in?numbers?where?n?<?1000?select?n
這次不需要 orderby 子句,但處理時間略長(對于這個查詢,處理時間的變化不太明顯,但下一個示例會改變選擇條件,處理時間的變化就比較明顯了)。
用 foreach 語句輸出查詢的結果,與前面的示例相同:
Console.WriteLine("Numbers less than 1000:");
foreach?(var?item?in?queryResults)?{Console.WriteLine(item);
}
同樣,將結果輸出到控制臺上,并讀取一個字符以暫停輸出:
Console.Write("Program?finished,?press?Enter/Return?to?continue:");
Console.ReadLine();
使用 LINQ,可以很容易地修改查詢條件,以便演示數據集的不同特性。但是,根據查詢返回的結果數,每次都輸出所有的結果是沒有意義的。
?微信公眾號?
DotNet講堂