随笔 - 73  文章 - 0 评论 - 41 阅读 - 26598
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

1.Select 和 SelectMany 方法

SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>)
将序列的每个元素投影到 IEnumerable 并将结果序列合并为一个序列。

1. 使用 SelectMany<TSource,TResult>(IEnumerable, Func<TSource,IEnumerable>) 对数组执行一对多投影。

    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" } } };

    // 使用 SelectMany() 查询
    IEnumerable<string> query1 = petOwners.SelectMany(petOwner => petOwner.Pets);
    // 使用 Select() 查询达到使用 SelectMany() 的查询效果
    IEnumerable<List<String>> query2 =
        petOwners.Select(petOwner => petOwner.Pets);

2.将序列的每个元素投影到 IEnumerable<T>,并将结果序列合并为一个序列,并对其中每个元素调用结果选择器函数。

方法:SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>)
原型:

public static System.Collections.Generic.IEnumerable<TResult> 
SelectMany<TSource,TCollection,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, 
Func<TSource,System.Collections.Generic.IEnumerable<TCollection>> collectionSelector, 
Func<TSource,TCollection,TResult> resultSelector);

示例:

//将有1对多关系的两个集合,合并输出为一个集合
var query3 = petOwners.SelectMany(petOwner => petOwner.Pets, (owner, pet) => new { OwnerName = owner.Name, Pet = pet });
query3.ToList().ForEach(x => Console.WriteLine($"{x.OwnerName}:{x.Pet}"));
posted on   hrx521  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示