在表示語言集成查詢 (LINQ) 使用 LINQ 性查詢語法,文檔中的多數查詢編寫。但是,編譯代碼時,必須將查詢語法轉換為方法,這就需要 .NET 公共語言運行時 (CLR)。這些方法調用標准查詢運算符的名稱類似 Where、Select、GroupBy、Join、Max和 Average。可以調用這些方法直接使用方法語法而不是查詢語法。
查詢語法和方法語法語義相同,但是,許多人員發現查詢語法更簡單、更易於閱讀。某些查詢必須表示為方法調用。例如,必須使用方法調用表示檢索元素的數量與指定的條件的查詢。還必須使用方法需要檢索元素的最大值在源序列的查詢。System.Linq 命名空間中的標准查詢運算符的參考文檔通常使用方法語法。
1 static void Main(string[] args) 2 { 3 var nums = new int[4] { 1, 2, 3, 4 }; 4 5 var qureyNums = from n in nums 6 where n % 2 == 0 7 orderby n descending 8 select n; 9 10 Console.WriteLine("qureyNums:"); 11 foreach (var n in qureyNums) 12 { 13 Console.WriteLine(n); 14 } 15 16 var queryNums2 = nums.Where(n => n % 2 == 0).OrderByDescending(n => n); 17 Console.WriteLine("qureyNums2:"); 18 foreach (var n in queryNums2) 19 { 20 Console.WriteLine(n); 21 } 22 23 Console.Read(); 24 }
兩個示例的輸出是相同的。 您可以看到兩種形式的查詢變量的類型是相同的:IEnumerable<T>。
若要了解基於方法的查詢,讓我們進一步地分析它。注意,在表達式的右側,where 子句現在表示為對 numbers 對象的實例方法,在您重新調用該對象時其類型為 IEnumerable<int>。如果您熟悉泛型 IEnumerable<T> 接口,那麼您就會了解,它不具有 Where 方法。但是,如果您在 Visual Studio IDE 中調用 IntelliSense 完成列表,那麼您不僅將看到 Where 方法,而且還會看到許多其他方法,如 Select、SelectMany、Join 和Orderby。下面是所有標准查詢運算符。盡管看起來 IEnumerable<T> 似乎已被重新定義以包括這些附加方法,但事實上並非如此。這些標准查詢運算符都是作為“擴展方法”實現的。