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中文网其他相关文章!