#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 исправил это — удалил анонимный объект. Спасибо.