首页 >后端开发 >C++ >linq选择与selectany:在变平嵌套集合时它们有何不同?

linq选择与selectany:在变平嵌套集合时它们有何不同?

Susan Sarandon
Susan Sarandon原创
2025-01-28 17:46:08994浏览

LINQ Select vs. SelectMany: How Do They Differ When Flattening Nested Collections?

LINQ Select 与 SelectMany:扁平化嵌套集合的区别

许多开发者在学习LINQ To SQL时,常常对SelectSelectMany方法的差异感到困惑。本文将通过一个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中SelectSelectMany方法的基本区别。Select转换序列中的单个元素,而SelectMany扁平化嵌套序列,从而在操作数据结构方面提供了更大的灵活性。

以上是linq选择与selectany:在变平嵌套集合时它们有何不同?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn