C#3.0新增功能09 LINQ 標準查詢運算符 01 概述

標準查詢運算符 是組成 LINQ 模式的方法。 這些方法中的大多數都做用於序列;其中序列指其類型實現 IEnumerable<T> 接口或 IQueryable<T> 接口的對象。 標準查詢運算符提供包括篩選、投影、聚合、排序等在內的查詢功能。html

共有兩組 LINQ 標準查詢運算符,一組做用於類型 IEnumerable<T> 的對象,另外一組做用於類型 IQueryable<T> 的對象。 構成每一個集合的方法分別是 Enumerable 和 Queryable 類的靜態成員。這些方法被定義爲做爲方法運行目標的類型的擴展方法。 這意味着可使用靜態方法語法或實例方法語法來調用它們。api

此外,多個標準查詢運算符方法做用於那些基於 IEnumerable<T> 或 IQueryable<T> 的類型外的類型。 Enumerable 類型定義了兩種這樣的方法,這兩種方法都做用於類型 IEnumerable 的對象。這些方法(Cast<TResult>(IEnumerable) 和 OfType<TResult>(IEnumerable))均容許在 LINQ 模式中查詢非參數化或非泛型集合。 這些方法經過建立一個強類型的對象集合來實現這一點。Queryable 類定義了兩種相似的方法 Cast<TResult>(IQueryable) 和 OfType<TResult>(IQueryable),這兩種方法都做用於類型 Queryable 的對象。ide

各個標準查詢運算符在執行時間上有所不一樣,具體狀況取決於它們是返回單一值仍是值序列。 返回單一實例值的這些方法(例如 Average 和 Sum)當即執行。 返回序列的方法會延遲查詢執行,並返回一個可枚舉的對象。優化

對於在內存中集合上運行的方法(即擴展 IEnumerable<T> 的那些方法),返回的可枚舉對象將捕獲傳遞到方法的參數。 在枚舉該對象時,將使用查詢運算符的邏輯,並返回查詢結果。ui

與之相反,擴展 IQueryable<T> 的方法不會實現任何查詢行爲,但會生成一個表示要執行的查詢的表達式樹。 源 IQueryable<T> 對象執行查詢處理。spa

能夠在一個查詢中將對查詢方法的調用連接在一塊兒,這就使得查詢的複雜性可能會變得不肯定。code

下面的代碼示例演示如何使用標準查詢運算符來獲取有關序列的信息。htm

string sentence = "the quick brown fox jumps over the lazy dog";  
// 將字符串拆分爲單個單詞以建立集合 
string[] words = sentence.Split(' ');  
  
// 使用查詢表達式語法
var query = from word in words  
            group word.ToUpper() by word.Length into gr  
            orderby gr.Key  
            select new { Length = gr.Key, Words = gr };  
  
// 使用基於方法的查詢語法。  
var query2 = words.  
    GroupBy(w => w.Length, w => w.ToUpper()).  
    Select(g => new { Length = g.Key, Words = g }).  
    OrderBy(o => o.Length);  
  
foreach (var obj in query)  
{  
    Console.WriteLine("Words of length {0}:", obj.Length);  
    foreach (string word in obj.Words)  
        Console.WriteLine(word);  
}  
  
// 輸出:
// Words of length 3:  
// THE  
// FOX  
// THE  
// DOG  
// Words of length 4:  
// OVER  
// LAZY  
// Words of length 5:  
// QUICK  
// BROWN  
// JUMPS

擴展標準查詢運算符

經過建立適合於目標域或技術的特定於域的方法,能夠增大標準查詢運算符的集合。 也能夠用本身的實現來替換標準查詢運算符,這些實現提供諸如遠程計算、查詢轉換和優化之類的附加服務。 有關示例,請參見 AsEnumerable對象

對數據進行排序 (C#)blog

集運算 (C#)

篩選數據 (C#)

限定符運算 (C#)

投影運算 (C#)

數據分區 (C#)

聯接運算 (C#)

數據分組 (C#)

生成運算 (C#)

相等運算 (C#)

元素運算 (C#)

轉換數據類型 (C#)

串聯運算 (C#)

聚合運算 (C#)

 

相關文章
相關標籤/搜索