LINQ - 查詢運算子
一組構成查詢模式的擴充套件方法稱為LINQ標準查詢運算子。作為LINQ查詢表示式的構建塊,這些運算子提供了多種查詢功能,例如過濾、排序、投影、聚合等。
LINQ標準查詢運算子可以根據其功能分為以下幾類。
- 過濾運算子
- 連線運算子
- 投影操作
- 排序運算子
- 分組運算子
- 轉換
- 連線
- 聚合
- 量詞操作
- 分割槽操作
- 生成操作
- 集合操作
- 相等性
- 元素運算子
過濾運算子
過濾是一種限制結果集的操作,以便它只包含滿足特定條件的選定元素。
| 運算子 | 描述 | C# 查詢表示式語法 | VB 查詢表示式語法 |
|---|---|---|---|
| where | 根據謂詞函式過濾值 | where | Where |
| OfType | 根據值能否轉換為指定型別來過濾值 | 不適用 | 不適用 |
連線運算子
連線是指一種操作,其中目標是資料來源,這些資料來源之間以直接方式難以跟蹤其關係。
| 運算子 | 描述 | C# 查詢表示式語法 | VB 查詢表示式語法 |
|---|---|---|---|
| Join | 該運算子基於匹配的鍵連線兩個序列 | join … in … on … equals … | From x In …, y In … Where x.a = y.a |
| GroupJoin | 連線兩個序列並對匹配的元素進行分組 | join … in … on … equals … into … | Group Join … In … On … |
投影操作
投影是一種操作,其中物件被轉換成一個全新的形式,只包含特定的屬性。
| 運算子 | 描述 | C# 查詢表示式語法 | VB 查詢表示式語法 |
|---|---|---|---|
| Select | 該運算子基於轉換函式投影值 | select | Select |
| SelectMany | 該運算子投影基於轉換函式的值序列,並將它們展平為單個序列 | 使用多個 from 子句 | 使用多個 From 子句 |
排序運算子
排序操作允許根據一個或多個屬性對序列的元素進行排序。
| 運算子 | 描述 | C# 查詢表示式語法 | VB 查詢表示式語法 |
|---|---|---|---|
| OrderBy | 該運算子按升序排序值 | orderby | Order By |
| OrderByDescending | 該運算子按降序排序值 | orderby ... descending | Order By ... Descending |
| ThenBy | 執行二次升序排序 | orderby …, … | Order By …, … |
| ThenByDescending | 執行二次降序排序 | orderby …, … descending | Order By …, … Descending |
| Reverse | 反轉集合中元素的順序 | 不適用 | 不適用 |
分組運算子
這些運算子根據共同的共享屬性將資料放入一些組中。
| 運算子 | 描述 | C# 查詢表示式語法 | VB 查詢表示式語法 |
|---|---|---|---|
| GroupBy | 將專案序列組織成組,並將其作為 IGrouping<key, element> 型別的 IEnumerable 集合返回。 | group … by -or- group … by … into … | Group … By … Into … |
| ToLookup | 執行分組操作,其中返回鍵值對序列 | 不適用 | 不適用 |
轉換
這些運算子更改輸入物件的型別,並用於各種各樣的應用程式。
| 運算子 | 描述 | C# 查詢表示式語法 | VB 查詢表示式語法 |
|---|---|---|---|
| AsEnumerable | 將輸入型別返回為 IEnumerable<T> | 不適用 | 不適用 |
| AsQueryable | 將 (泛型) IEnumerable 轉換為 (泛型) IQueryable | 不適用 | 不適用 |
| Cast | 將集合的元素強制轉換為指定型別 | 使用顯式型別的範圍變數。例如:from string str in words | From … As … |
| OfType | 根據值能否轉換為特定型別來過濾值 | 不適用 | 不適用 |
| ToArray | 強制執行查詢並將集合轉換為陣列 | 不適用 | 不適用 |
| ToDictionary | 基於鍵選擇器函式將元素設定到 Dictionary<TKey, TValue> 中,並強制執行 LINQ 查詢 | 不適用 | 不適用 |
| ToList | 透過將集合轉換為 List<T> 來強制執行查詢 | 不適用 | 不適用 |
| ToLookup | 強制執行查詢,並基於鍵選擇器函式將元素放入 Lookup<TKey, TElement> 中 | 不適用 | 不適用 |
連線
執行兩個序列的連線,在其操作方面與 Union 運算子非常相似,只是它不刪除重複項。
| 運算子 | 描述 | C# 查詢表示式語法 | VB 查詢表示式語法 |
|---|---|---|---|
| Concat | 連線兩個序列以形成單個序列。 | 不適用 | 不適用 |
聚合
執行任何型別的所需聚合,並允許在 LINQ 中建立自定義聚合。
| 運算子 | 描述 | C# 查詢表示式語法 | VB 查詢表示式語法 |
|---|---|---|---|
| Aggregate | 對集合的值進行操作以執行自定義聚合操作 | 不適用 | 不適用 |
| Average | 計算值集合的平均值 | 不適用 | Aggregate … In … Into Average() |
| Count | 計算集合中滿足謂詞函式的元素個數 | 不適用 | Aggregate … In … Into Count() |
| LongCount | 計算大型集合中滿足謂詞函式的元素個數 | 不適用 | Aggregate … In … Into LongCount() |
| Max | 查詢集合中的最大值 | 不適用 | Aggregate … In … Into Max() |
| Min | 查詢集合中的最小值 | 不適用 | Aggregate … In … Into Min() |
| Sum | 查詢集合中值的總和 | 不適用 | Aggregate … In … Into Sum() |
量詞操作
這些運算子返回布林值,即 True 或 False,具體取決於序列中的一些或所有元素是否滿足特定條件。
| 運算子 | 描述 | C# 查詢表示式語法 | VB 查詢表示式語法 |
|---|---|---|---|
| All | 如果序列的所有元素都滿足謂詞條件,則返回“True”值 | 不適用 | Aggregate … In … Into All(…) |
| Any | 透過搜尋序列來確定序列中的任何元素是否滿足指定條件 | 不適用 | Aggregate … In … Into Any() |
| Contains | 如果找到序列中存在特定元素,則返回“True”值;如果序列中不包含該特定元素,則返回“false”值 | 不適用 | 不適用 |
分割槽運算子
將輸入序列分成兩個單獨的部分,而不重新排列序列的元素,然後返回其中一個部分。
| 運算子 | 描述 | C# 查詢表示式語法 | VB 查詢表示式語法 |
|---|---|---|---|
| Skip | 跳過序列中指定數量的元素,並返回其餘元素 | 不適用 | Skip |
| SkipWhile | 與 Skip 相同,唯一的例外是跳過的元素數量由布林條件指定 | 不適用 | Skip While |
| Take | 從序列中獲取指定數量的元素,並跳過其餘元素 | 不適用 | Take |
| TakeWhile | 與 Take 相同,只是獲取的元素數量由布林條件指定 | 不適用 | Take While |
生成操作
生成運算子建立新的值序列。
| 運算子 | 描述 | C# 查詢表示式語法 | VB 查詢表示式語法 |
|---|---|---|---|
| DefaultIfEmpty | 應用於空序列時,在序列中生成預設元素 | 不適用 | 不適用 |
| Empty | 返回一個空值序列,是最簡單的生成運算子 | 不適用 | 不適用 |
| Range | 生成包含整數或數字序列的集合 | 不適用 | 不適用 |
| Repeat | 生成包含特定長度重複值的序列 | 不適用 | 不適用 |
集合操作
集合操作有四個運算子,每個運算子根據不同的條件產生結果。
| 運算子 | 描述 | C# 查詢表示式語法 | VB 查詢表示式語法 |
|---|---|---|---|
| Distinct | 透過過濾任何重複資料,從集合中生成唯一值的列表 | 不適用 | Distinct |
| Except | 比較兩個集合的值,並返回一個集合中不在另一個集合中的值 | 不適用 | 不適用 |
| Intersect | 返回在兩個單獨集合中被發現相同的數值集合 | 不適用 | 不適用 |
| Union | 將兩個不同集合的內容組合成單個列表,而且不包含任何重複內容 | 不適用 | 不適用 |
相等性
比較兩個句子(可列舉的)並確定它們是否完全匹配。
| 運算子 | 描述 | C# 查詢表示式語法 | VB 查詢表示式語法 |
|---|---|---|---|
| SequenceEqual | 如果發現兩個序列彼此相同,則返回布林值 | 不適用 | 不適用 |
元素運算子
除了 DefaultIfEmpty 之外,其餘八個標準查詢元素運算子都從集合中返回單個元素。
| 運算子 | 描述 | C# 查詢表示式語法 | VB 查詢表示式語法 |
|---|---|---|---|
| ElementAt | 返回集合中特定索引中存在的元素 | 不適用 | 不適用 |
| ElementAtOrDefault | 與 ElementAt 相同,只是如果特定索引超出範圍,它還會返回預設值 | 不適用 | 不適用 |
| First | 檢索集合中的第一個元素或滿足特定條件的第一個元素 | 不適用 | 不適用 |
| FirstOrDefault | 與 First 相同,只是如果不存在此類元素,它還會返回預設值 | 不適用 | 不適用 |
| Last | 檢索集合中存在的最後一個元素或滿足特定條件的最後一個元素 | 不適用 | 不適用 |
| LastOrDefault | 與 Last 相同,只是如果不存在任何此類元素,它還會返回預設值 | 不適用 | 不適用 |
| Single | 返回集合的單個元素或滿足特定條件的單個元素 | 不適用 | 不適用 |
| SingleOrDefault | 與 Single 相同,只是如果不存在任何此類單個元素,它還會返回預設值 | 不適用 | 不適用 |
| DefaultIfEmpty | 如果集合或列表為空或為 null,則返回預設值 | 不適用 | 不適用 |
廣告