Выберите словарь с определенными свойствами класса

#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()  );