#c# #linq
Вопрос:
У меня есть следующий студенческий класс :
public class Student { public string Name { get; set; } public int? Age { get; set; } public bool? IsMale { get; set; } }
и иметь список курсов, на которых учащиеся назначаются в качестве словаря, где все курсы хранятся в виде:
Dictionarylt;string, Listlt;Studentgt;gt;
где Ключ (строка) — это код курса, а Значение (Списокlt; студент gt;lt; студентgt;) — это студенты, зачисленные на этот специальный курс, все свойства которого имеют значение.
Теперь я хочу упростить набор данных, указав только имена студентов. Таким образом, у меня все равно будет Dictionarylt;string, Listlt;Studentgt;gt;
место, где Name
для каждого объекта задано только свойство Student
.
Как я могу написать такой запрос LINQ, чтобы получить нужные мне данные?
Ответ №1:
Поскольку словарь реализует IEnumerablelt;KeyValuePairlt;string, Listlt;Studentgt;gt;gt;
, вы можете написать
var newDict = oldDict .ToDictionary( kvp =gt; kvp.Key, kvp =gt; kvp.Value.Select(s =gt; new Student { Name = s.Name }).ToList() );
Обратите внимание, что у нас есть вложенный запрос LINQ, основанный на списке учащихся. Он выбирает всех учащихся из списка и создает новых учащихся, в новом списке которых указано только имя.
Таким образом, для каждой пары значений ключей мы сохраняем Ключ (код курса), но создаем новое значение в виде упрощенного списка студентов.
Вместо этого вы также можете создать Dictionarylt;string, Listlt;stringgt;gt;
с
var newDict = oldDict .ToDictionary( kvp =gt; kvp.Key, kvp =gt; kvp.Value.Select(s =gt; s.Name).ToList() );