[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.
SelectMany() позволяет достать многомерную последовательность таким образом, что в противном случае потребуется второй Select() или цикл.
В приведенном ниже примере мы увидим, в чем именно заключается разница при доступе к свойствам.
Когда мы получаем доступ к некоторым данным с помощью select, он выдает нам данные, сгруппированные под родителем (т.е. дает несколько массивов). Чтобы получить доступ к выводу, нам нужно выполнить цикл дважды.
Посмотрим на примере:
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 |
class Program { static void Main() { List<User> users = new List<User>() { new User{ Id = 1, Name = "Alex", Age = 30, Marks = new int[]{ 4,3,3,4 } }, new User{ Id = 2, Name = "Tom", Age = 23, Marks = new int[]{ 3,4,2,4 }}, new User{ Id = 3, Name = "Marry", Age = 21, Marks = new int[]{ 4,2,5,5 }}, new User{ Id = 4, Name = "John", Age = 23, Marks = new int[] { 4, 5, 3, 4 }} }; //Получаем коллекцию массивов List<int[4]> var marks = users.Select(e => e.Marks).ToList(); //Получаем коллекцию всех оценок List<int>(16) var marks2 = users.SelectMany(e => e.Marks).ToList(); } } class User { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public int[] Marks { get; set; } } |
В том примере, где мы используем SelectMany, он выдает выбранные элементы в одном массиве (т.е. он выдает результат как объединение всех результатов команды select).