Как я могу использовать Linq, чтобы сгладить это в один List<string>, который содержит все списки в словаре?
Спасибо!
Ответ 1
Очень легко:
var list = dictionary.Values // To get just the List<string>s
.SelectMany(x => x) // Flatten
.ToList(); // Listify
Здесь вызов SelectMany принимает последовательность входов (списки, которые делают значения словаря), и проектирует каждый отдельный вход в другую последовательность выходов - в данном случае "элементы списка". Затем он выравнивает последовательность последовательностей в одну последовательность.
Ответ 2
в качестве запроса
var flattened = from p in dictionary
from s in p.Value
select s;
или как методы...
var flattened = dictionary.SelectMany(p => p.Value);
Мне нравится это по сравнению с другими, поскольку я передаю весь словарь в запрос Linq, а не только значения.