Собрать отдельный список значений ключей из вложенной коллекции?

#c# #linq

#c# #linq

Вопрос:

Кажется, что это совершенно просто, но сегодня утром мой мозг работает не очень хорошо, и, похоже, я не могу найти хорошее поисковое выражение для ответа.

У меня есть IList<IDictionary<string, string>> , и я хочу получить IList<string> , содержащий отдельный список уникальных имен ключей в моей коллекции объектов словаря. Какой быстрый и элегантный способ сделать это? Я уверен, что ответ прост, я просто не могу об этом думать.

Ответ №1:

 var allKeys = from dict in list
              from key in dict.Keys
              select key;

var distinctKeys = allKeys.Distinct().ToList();
 

Или, если вы предпочитаете лямбда-синтаксис:

 var distinctKeys = list.SelectMany(dict => dict.Keys).Distinct().ToList();
 

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

1. Хах, я знал, что для меня это будет «духовый» момент. Спасибо!

Ответ №2:

 list.SelectMany(d => d.Keys).Distinct()