Linq中SelectMany图文详解-Chinar

Chinar blog www.chinar.xin

SelectMany中文教程


本文提供全流程,中文翻译

助力快速理解 SelectMany 的高级用法

为初学者节省宝贵的时间,避免采坑!

Chinar —— 心分享、心创新!

我们的初衷是将一种简单的生活方式带给世人

使有限时间 具备无限可能

Chinar 教程效果:
在这里插入图片描述



全文高清图片,点击即可放大观看 (很多人竟然不知道)


1 Intro —— 简介


Linq函数关键字大全!( Chinar Blog )

SelectMany对于初学者来讲,是一个比较难理解的函数。其内部逻辑,有点绕。

在使用上,对初学者来讲,尤其是容易懵逼…

但它的用途极其广泛,且极大的节省代码、提高代码可读性。

避免大量的循环代码

这里我以 4个例子,说明SelectMany的多种用法。

请大家仔细、耐心的看完。

举个例子

  /// <summary>
    /// 第一层:老爹
    /// </summary>
    public class One
    {
   
   
        public string    Name;    //名字
        public int       Age;     //年龄
        public List<Two> TwoList; //儿子


        public One(string name, int age, List<Two> twoList)
        {
   
   
            Name    = name;
            Age     = age;
            TwoList = twoList;
        }
    }


    /// <summary>
    /// 第二层:儿子
    /// </summary>
    public class Two
    {
   
   
        public string      Name;      //名字
        public int         Age;       //年龄
        public List<Three> ThreeList; //儿子


        public Two(string name, int age, List<Three> threeList)
        {
   
   
            Name      = name;
            Age       = age;
            ThreeList = threeList;
        }


        public override string ToString()
        {
   
   
            return $"{nameof(Name)}: {Name}, {nameof(Age)}: {Age}, {nameof(ThreeList)}: {ThreeList}";
        }
    }


    /// <summary>
    /// 第三层:孙子
    /// </summary>
    public class Three
    {
   
   
        public int Age;   //年龄
        public int Score; //分数


        public Three(int age, int score)
        {
   
   
            Age   = age;
            Score = score;
        }


        public override string ToString()
        {
   
   
            return $"{nameof(Age)}: {Age}, {nameof(Score)}: {Score}";
        }
    }

初始化,填入数据

为了便于大家理解,我用了
one、two、three 做为3层嵌套的子父类;
one 对应的数据值为: 爹、年龄
Two 对应:儿子 、 年龄

 List<One> ones = new List<One> //第一层列表
{
   
   
     new One("爹1", 1, new List<Two> //第儿子层
     {
   
   
         new Two("儿子_0", 20, new List<Three> {
   
   new Three(30, 100)}), //第三层
         new Two("儿子_1", 21, new List<Three> {
   
   new Three(31, 100)}), //第三层
         new Two("儿子_2", 22, new List<Three> {
   
   new Three(32, 100)})  //第三层
     }),
     new One("爹2", 10, new List<Two>
     {
   
   
         new Two("儿子_0", 23, new List<Three> {
   
   new Three(33, 70)})
     }),
     new One("爹3", 100, new List<Two>
     {
   
   
         new Two("儿子_0", 24, new List<Three> {
   
   new Three(34, 80)}),
         new Two("儿子_1", 25, new List<Three> {
   
   new Three(35, 80)})
     }),
     new One("爹4", 1000, new List<Two>
     {
   
   
         new Two("儿子_0", 26, new List<Three> {
   
   new Three(36, 50)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值