c# - 예제 - Linq: 긴 목록목록 목록




c# list removeall (2)

나는 타입 B 의 객체리스트로 구성된 타입 A 의 객체를 가지고있다 :

class A { list<B> Alist;}
class B { string C; string D;}

내 프로그램에는 A 객체 목록이 있습니다.

list<A> listOfA = computeAList();

그 목록에있는 모든 C 문자열을 선택하고 싶습니다. 다음 진술은 내가 원하는 결과를 줄 것이라고 기대했다. C 포함하는리스트를 리턴한다.

var query = from objectA in listOfA
            select objectA.Alist.FindAll(x => x.C.Length > 0).C;

대신에 모든 C 의 단일 목록을 얻는 방법이 있습니까?

https://code.i-harness.com


ybo의 답변도 내 첫 번째 응답이었을 것입니다. 이 쿼리 표현식은 다음과 같습니다.

var query = from a in computeAList()
            from b in a.Alist
            select b.C;

완전성을 위해이 스레드의 다른 대답은 동일한 주제의 변형입니다.

ybo에서 (점 표기법으로 표현 된 정확히 동일한 쿼리) :

var query = listOfA.SelectMany(a => a.Alist, (a, b) => b.C);

Ray Hayes (Where 절 포함)에서 약간 재 형식화했습니다.

var query = listOfA.SelectMany(a => a.AList, (a, b) => b.C)
                   .Where(c => c.Length > 0);

나도 비슷한 대답을했을 것이다. 유일한 수정은 where 절을 추가하여 빈 문자열 (C가 비어 있음)을 피하는 것이다.

listOfA.SelectMany( a => a.AList, (a, b) => b.C ).Where( c => c.Length > 0 );






linq