LINQ 中的數據分割是指將輸入序列分割成兩個區段的作業,而不重新排列元素,然後傳回其中一個區段。
這很重要
這些範例會使用 System.Collections.Generic.IEnumerable<T> 資料來源。 根據 System.Linq.IQueryProvider 的資料來源會使用 System.Linq.IQueryable<T> 資料來源和運算式樹。 運算式樹在允許的 C# 語法方面有限制。 此外,每個 IQueryProvider 資料來源 (例如 EF Core) 可能會施加更多限制。 檢查資料來源的文件。
以下圖示顯示字元序列上三個不同分割操作的結果。 第一個操作會傳回序列中的前三個元素。 第二個作業會略過前三個元素,並傳回其餘元素。 第三個操作會略過序列中的前兩個元素,並回傳接下來的三個元素。
分割順序的標準查詢運算符方法會列在下一節中。
運營商
| 方法名稱 | 說明 | C# 查詢表示式語法 | 詳細資訊 |
|---|---|---|---|
| 跳過 | 跳過序列中的元素直到特定位置。 | 不適用。 | Enumerable.Skip Queryable.Skip |
| 跳過(SkipWhile) | 在元素不符合條件之前,會根據述詞函式略過元素。 | 不適用。 | Enumerable.SkipWhile Queryable.SkipWhile |
| 拿 | 取用序列中至指定位置的元素。 | 不適用。 | Enumerable.Take Queryable.Take |
| TakeWhile | 根據判斷函數不斷取得元素,直到有元素不符合條件為止。 | 不適用。 | Enumerable.TakeWhile Queryable.TakeWhile |
| 區塊 | 將序列的元素分割成具有指定最大大小的區塊。 | 不適用。 | Enumerable.Chunk Queryable.Chunk |
下列所有範例都會使用 Enumerable.Range(Int32, Int32) 來產生從 0 到 7 的數位序列。
備註
您可以在 標準查詢運算子概觀 一文中參閱此區域的常見資料來源。
您可以使用Take方法,來取用序列中的第一個元素。
foreach (int number in Enumerable.Range(0, 8).Take(3))
{
Console.WriteLine(number);
}
// This code produces the following output:
// 0
// 1
// 2
您可以使用 Skip 方法來略過序列中的第一個專案,並使用剩餘的元素:
foreach (int number in Enumerable.Range(0, 8).Skip(3))
{
Console.WriteLine(number);
}
// This code produces the following output:
// 3
// 4
// 5
// 6
// 7
TakeWhile和SkipWhile方法也會在序列中採用和略過元素。 不過,這些方法根據條件來選擇跳過或使用元素,而非基於固定數量的元素。
TakeWhile 會提取序列中的元素,直到元素不符合條件為止。
foreach (int number in Enumerable.Range(0, 8).TakeWhile(n => n < 5))
{
Console.WriteLine(number);
}
// This code produces the following output:
// 0
// 1
// 2
// 3
// 4
只要條件符合,SkipWhile 就會略過第一個元素。 會傳回第一個不符合條件的元素,以及所有後續元素。
foreach (int number in Enumerable.Range(0, 8).SkipWhile(n => n < 5))
{
Console.WriteLine(number);
}
// This code produces the following output:
// 5
// 6
// 7
運算子 Chunk 用於根據指定的 size 分割序列的元素。
int chunkNumber = 1;
foreach (int[] chunk in Enumerable.Range(0, 8).Chunk(3))
{
Console.WriteLine($"Chunk {chunkNumber++}:");
foreach (int item in chunk)
{
Console.WriteLine($" {item}");
}
Console.WriteLine();
}
// This code produces the following output:
// Chunk 1:
// 0
// 1
// 2
//
//Chunk 2:
// 3
// 4
// 5
//
//Chunk 3:
// 6
// 7
上述 C# 程式代碼:
- 依賴 Enumerable.Range(Int32, Int32) 產生數位序列。
-
Chunk套用 運算符,將序列分割成大小上限為三的區塊。