Группировать список в список<Список>

#c# #linq #list

#c# #linq #Список

Вопрос:

Как я могу Group List<Person> Persons Person.Age использовать LINQ и создать новый List<List<Person>> PersonsByAge ?

 public class Person
{
    public string Name;
    public int Age
}
 

Комментарии:

1. Зачем вам нужны списки?

2. @albertjan Есть ли у меня здесь лучшая альтернатива?

Ответ №1:

A GroupBy и несколько ToList вызовов должны выполнить эту работу:

 List<Person> persons = ...;
List<List<Person>> byAge = persons
                           .GroupBy(p => p.Age)
                           .Select(ps => ps.ToList())
                           .ToList();
 

Комментарии:

1. Потрудитесь объяснить, что не работает? Здесь все работает нормально.

2. вы пробовали это в цикле foreach?

Ответ №2:

Одно из возможных решений будет выглядеть так:

 var persons = new List<Person>
{
    new Person { Age = 20 },
    new Person { Age = 30 },
    new Person { Age = 20 },
    new Person { Age = 40 },
    new Person { Age = 50 },
    new Person { Age = 50 },
    new Person { Age = 20 }
};

var result =    from person in persons
                group person by person.Age into g
                select g.ToList();
var listOfListOfPersons = result.ToList();
 

Это создало List List<Person> бы элементы хранения.

Еще одной возможностью было бы создать класс, представляющий (строго типизированную) List<List<Person>> структуру:

 public class Persons
{
    public List<Person> Entries { get; set; }
}
public class Person
{
    public Int32 Age { get; set; }
}
 

и заполните его следующим образом:

 var result =    from person in persons
                group person by person.Age into g
                select new Persons
                {
                    Entries = g.ToList()
                };
var listOfListOfPersons = result.ToList();
 

Комментарии:

1. Объявление 1) Зачем вам нужен анонимный тип для хранения только одного элемента?

2. @MarcinJuraszek исправил это — удалил анонимный объект. Спасибо.