本文為機器翻譯文章。如需檢視英文版,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文

Enumerable.SelectMany<TSource, TResult> 方法 (IEnumerable<TSource>, Func<TSource, Int32, IEnumerable<TResult>>)

 

每個序列的項目至 IEnumerable<T>, ,並將簡化成單一序列產生的序列。 各來源項目的索引是在該項目的投影表單中使用。

命名空間:   System.Linq
組件:  System.Core (於 System.Core.dll)

public static IEnumerable<TResult> SelectMany<TSource, TResult>(
	this IEnumerable<TSource> source,
	Func<TSource, int, IEnumerable<TResult>> selector
)

參數

source
Type: System.Collections.Generic.IEnumerable<TSource>

要投影的值序列。

selector
Type: System.Func<TSource, Int32, IEnumerable<TResult>>

要套用到每個來源項目的轉換函式;此函式的第二個參數代表來源項目的索引。

傳回值

Type: System.Collections.Generic.IEnumerable<TResult>

IEnumerable<T> 其項目是叫用在輸入序列的每個項目-一對多轉換函式的結果。

類型參數

TSource

項目的型別 source

TResult

所傳回的序列的項目類型 selector

Exception Condition
ArgumentNullException

sourceselectornull

實作這個方法會使用延後的執行。 立即傳回值是儲存,才能執行此動作的所有資訊的物件。 這個方法所表示的查詢不會執行直到列舉物件可以藉由呼叫其 GetEnumerator 方法直接或使用 foreach 中 Visual C# 或 For Each 中 Visual Basic。

SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, Int32, IEnumerable<TResult>>) 方法列舉輸入的序列中,使用轉換函式對應至每個項目 IEnumerable<T>, ,然後列舉,並產生每個這類元素 IEnumerable<T> 物件。 也就是每個元素 source, ,selector 叫用,並傳回值的序列。 SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, Int32, IEnumerable<TResult>>) 然後將壓平合併成一維集合的這個二維集合 IEnumerable<T> 並將它傳回。 比方說,如果查詢使用 SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, Int32, IEnumerable<TResult>>) 取得訂單 (型別 Order) 資料庫中每位客戶,結果會是類型 IEnumerable<Order> 在 C# 或 IEnumerable(Of Order) 中 Visual Basic。 如果查詢改為使用 Select<TSource, TResult> 未合併的訂單集合的集合來取得訂單,而且結果的類型 IEnumerable<List<Order>> 在 C# 或 IEnumerable(Of List(Of Order)) 中 Visual Basic。

第一個引數 selector 代表要處理的項目。 第二個引數 selector 代表來源序列中項目的以零為起始的索引。 如果項目是以已知的順序排列,而且您想要處理特定的索引處的項目,例如,這非常有用。 它也可如果您想要擷取的一或多個項目索引。

下列程式碼範例示範如何使用 SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, Int32, IEnumerable<TResult>>) 陣列上執行的一對多預測,並使用每個外部項目的索引。

class PetOwner
{
    public string Name { get; set; }
    public List<string> Pets { get; set; }
}

public static void SelectManyEx2()
{
    PetOwner[] petOwners = 
        { new PetOwner { Name="Higa, Sidney", 
              Pets = new List<string>{ "Scruffy", "Sam" } },
          new PetOwner { Name="Ashkenazi, Ronen", 
              Pets = new List<string>{ "Walker", "Sugar" } },
          new PetOwner { Name="Price, Vernette", 
              Pets = new List<string>{ "Scratches", "Diesel" } },
          new PetOwner { Name="Hines, Patrick", 
              Pets = new List<string>{ "Dusty" } } };

    // Project the items in the array by appending the index 
    // of each PetOwner to each pet's name in that petOwner's 
    // array of pets.
    IEnumerable<string> query =
        petOwners.SelectMany((petOwner, index) =>
                                 petOwner.Pets.Select(pet => index + pet));

    foreach (string pet in query)
    {
        Console.WriteLine(pet);
    }
}

// This code produces the following output:
//
// 0Scruffy
// 0Sam
// 1Walker
// 1Sugar
// 2Scratches
// 2Diesel
// 3Dusty

通用 Windows 平台
自 8 起供應
.NET Framework
自 3.5 起供應
可攜式類別庫
提供支援︰ 可攜式 .NET 平台
Silverlight
自 2.0 起供應
Windows Phone Silverlight
自 7.0 起供應
Windows Phone
自 8.1 起供應
回到頁首
顯示: