Difference Between Select and SelectMany

后端 未结 17 1390
长情又很酷
长情又很酷 2020-11-22 05:21

I\'ve been searching the difference between Select and SelectMany but I haven\'t been able to find a suitable answer. I need to learn the differenc

17条回答
  •  半阙折子戏
    2020-11-22 05:30

    The SelectMany() method is used to flatten a sequence in which each of the elements of the sequence is a separate.

    I have class user same like this

    class User
        {
            public string UserName { get; set; }
            public List Roles { get; set; }
        }
    

    main:

    var users = new List
                {
                    new User { UserName = "Reza" , Roles = new List{"Superadmin" } },
                    new User { UserName = "Amin" , Roles = new List{"Guest","Reseption" } },
                    new User { UserName = "Nima" , Roles = new List{"Nurse","Guest" } },
                };
    
    var query = users.SelectMany(user => user.Roles, (user, role) => new { user.UserName, role });
    
    foreach (var obj in query)
    {
        Console.WriteLine(obj);
    }
    //output
    
    //{ UserName = Reza, role = Superadmin }
    //{ UserName = Amin, role = Guest }
    //{ UserName = Amin, role = Reseption }
    //{ UserName = Nima, role = Nurse }
    //{ UserName = Nima, role = Guest }
    
    

    You can use operations on any item of sequence

    int[][] numbers = {
                    new[] {1, 2, 3},
                    new[] {4},
                    new[] {5, 6 , 6 , 2 , 7, 8},
                    new[] {12, 14}
                };
    
    IEnumerable result = numbers
                    .SelectMany(array => array.Distinct())
                    .OrderBy(x => x);
    
    //output
    
    //{ 1, 2 , 2 , 3, 4, 5, 6, 7, 8, 12, 14 }
    
     List> numbers = new List> {
                    new List {1, 2, 3},
                    new List {12},
                    new List {5, 6, 5, 7},
                    new List {10, 10, 10, 12}
                };
    
     IEnumerable result = numbers
                    .SelectMany(list => list)
                    .Distinct()
                    .OrderBy(x=>x);
    
    //output
    
    // { 1, 2, 3, 5, 6, 7, 10, 12 }
    

提交回复
热议问题