Linq 목록을 단일 목록으로


201

이것이 이미 답변되었지만 찾을 수없는 종류의 것 같습니다.

내 질문은 매우 간단합니다. 한 목록 에서이 작업을 수행하여 빈 목록을 새로 작성하고 다음 줄에서 집계하는 대신 최종 목록을 출력하는 단일 linq 문을 가질 수 있습니다. 세부 사항은 각각 거주지 목록을 포함하는 항목의 목록입니다. 모든 거주지를 평평한 목록으로 원합니다.

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

답변:


316

SelectMany확장 방법 을 사용하려고합니다 .

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

3
감사. @JaredPar에서 잘못된 요소를 선택했지만 지침에 감사드립니다.
Jarrett Widman

51

SelectMany 사용

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

35

다음은 샘플 코드입니다.

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);
}

그리고 결과는 다음과 같습니다.

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

29

쿼리 식 구문을 원하는 사람들에게는 두 가지 from 문 을 사용합니다.

var residences = (from d in details from a in d.AppForm_Residences select a).ToList();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.