ChatGPT解决这个技术问题 Extra ChatGPT

Linq list of lists to single list

Seems like this is the kind of thing that would have already been answered but I'm unable to find it.

My question is pretty simple, how can I do this in one statement so that instead of having to new the empty list and then aggregate in the next line, that I can have a single linq statement that outputs my final list. details is a list of items that each contain a list of residences, I just want all of the residences in a flat list.

var residences = new List<DAL.AppForm_Residences>();
details.Select(d => d.AppForm_Residences).ToList().ForEach(d => residences.AddRange(d));

N
Noldorin

You want to use the SelectMany extension method.

var residences = details.SelectMany(d => d.AppForm_Residences).ToList();

Thanks. @JaredPar has the selection from the wrong element, but thank you both for your guidance.
J
JaredPar

Use SelectMany

var all = residences.SelectMany(x => x.AppForm_Residences);

E
Eliahu Aaron

Here is a sample code for you:

List<int> listA = new List<int> { 1, 2, 3, 4, 5, 6 };

List<int> listB = new List<int> { 11, 12, 13, 14, 15, 16 };

List<List<int>> listOfLists = new List<List<int>> { listA, listB };

List<int> flattenedList = listOfLists.SelectMany(d => d).ToList();

foreach (int item in flattenedList)
{
    Console.WriteLine(item);
}

And the out put will be:

1
2
3
4
5
6
11
12
13
14
15
16
Press any key to continue . . .

S
Sean B

And for those that want the query expression syntax: you use two from statements

var residences = (from d in details from a in d.AppForm_Residences select a).ToList();