Как связать список <Список <String>> в С#

У меня есть List<List<String>>, который содержит

{  {"A" , "B" }, 
   {"C" , "D" }
}

Мне нужно объединить весь внутренний список в другой список

Таким образом, полученный List<String> будет содержать

     {"A","B","C","D"}

Теперь im использует for loop для этого

Есть ли способ сделать это с помощью LINQ или Lambda Expression.

Пожалуйста, помогите мне сделать это.

Спасибо заранее.

Ответ 1

Не обязательно Союз, но вы можете попробовать это

YourList.SelectMany(l=>l).Distinct()

Ответ 2

List<List<string>> collections = new List<List<string>>()
        {
          new List<string>(){"A" , "B" }, 
          new List<string>() {"C" , "D" }
        };

var list = collections.SelectMany(x => x).ToList();

SelectMany создает дерево выражений, которое при оценке выравнивает список списка до одного списка объединенных элементов.

ToList заставляет дерево выражений оцениваться и которое приводит к списку.

Если вы хотите удалить дубликаты, вы можете добавить отдельный вызов перед вызовом "ToList()"

Ответ 3

Вы можете использовать метод расширения SelectMany.

List<List<String>> masterList = { {"A" , "B" }, {"C" , "D" } };

IEnumerable<string> results = masterList.SelectMany(l => l);

Ответ 4

var result = myLists.SelectMany(l => l);

Ответ 5

Как насчет агрегата?

myLists.Aggregate((left, right) => left.Union(right));

Для меня это более выразительно, чем использование SelectMany, потому что оно говорит вам, что именно вы делаете: Совокупность списка списков, вызывая объединение на всех.

Ответ 6

Просто для пинков:

(from list in theList from e in list select e).Distinct().ToList()

Это, конечно, такое же решение, как @Alexander Taran, только с синтаксисом запроса вместо синтаксиса лямбда. (Или, по крайней мере, это должно быть: – у меня нет моей LINQPad.)