2016-08-25 2 views
1

부모 엔티티 및 각 상위 엔티티 집합이 있습니다 에는 하위 엔티티 C이 포함되어 있습니다.강력한 형식의 결과 필터링

는 내가 강하게 수집/자식의 이름을 모든 상위 개체의 목록을 입력 필터링하려면 '피터'

나는 결과에 강하게 유형의 목록이 필요 유의하시기 바랍니다.

List<P> parents = (List<P>)db.Ps.Select(a => a.Cs.Any(b => b.Name == "Peter")).ToList(); 

이 코드는 내 필요하지 않은 IEnumerable을 반환합니다. 참고 :이 시나리오와 코드는 학습 목적의 예제 일뿐입니다.

답변

3

부모 엔티티의 필터링 된 목록을 원하므로 Select 대신 Where을 사용해야합니다.

var res = db.Ps.Where(a => a.CS.Name == "Peter").ToList(); 

을 아니면 1-many이있는 경우 :

var res = db.Ps.Where(a => a.CS.Any(b => b.Name == "Peter")).ToList(); 

resPs 클래스의 목록입니다 이것은 당신이 원하는 것을해야한다.

+0

OP에서 'Cs'는 실제로 하위 엔티티 (아마도 1 - 많은 수)이므로 'Any'를 사용하면 유효합니다. – sallushan

+0

@sallushan 당신이 말했듯이 * 1- 많은 * 또는 1-1 일 수 있습니다. 하지만 1이면 많은 수를 사용합니다. BTW의 대답의 핵심은 '선택'대신에 시퀀스를 필터링하기 위해'Where'를 사용하는 것입니다. –

+0

예,하지만 대답을 바꾸어야합니다, 당신은 말하고 있습니다 _ 또한 아무 것도 사용할 수 없습니다 here_ – sallushan