LINQ Select 與 SelectMany:扁平化嵌套集合的區別
許多開發者在學習LINQ To SQL時,常常對Select
和SelectMany
方法的差異感到困惑。本文將通過一個LINQ To SQL示例,清晰地解釋它們的區別。
Select
方法用於轉換序列中的每個元素,並生成一個包含轉換後元素的新序列。而SelectMany
方法則作用於序列的序列,通過返回嵌套序列中的元素,將其扁平化成單個序列。
以下是一個LINQ To SQL示例:
<code class="language-csharp">public class PhoneNumber { public string Number { get; set; } } public class Person { public IEnumerable<PhoneNumber> PhoneNumbers { get; set; } public string Name { get; set; } } IEnumerable<Person> people = new List<Person>(); // Select 获取一个电话号码列表的列表。 IEnumerable<IEnumerable<PhoneNumber>> phoneLists = people.Select(p => p.PhoneNumbers); // SelectMany 将列表扁平化成单个电话号码。 IEnumerable<PhoneNumber> phoneNumbers = people.SelectMany(p => p.PhoneNumbers); // 使用带 resultSelector 参数的重载方法连接父项和子项数据: var directory = people .SelectMany(p => p.PhoneNumbers, (parent, child) => new { parent.Name, child.Number });</code>
在這個例子中,phoneLists
包含一系列列表,每個列表代表一個人的電話號碼。 SelectMany
方法將這個嵌套結構扁平化,生成phoneNumbers
,其中只包含單個電話號碼。
此外,我們還可以利用SelectMany
重載方法中的resultSelector
參數,在結果中包含父對象(Person)的信息。因此,directory
變量存儲一個匿名對象的列表,其中包含該人的姓名和電話號碼。
這個全面的例子演示了LINQ To SQL中Select
和SelectMany
方法的基本區別。 Select
轉換序列中的單個元素,而SelectMany
扁平化嵌套序列,從而在操作數據結構方面提供了更大的靈活性。
以上是linq選擇與selectany:在變平嵌套集合時它們有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!