2014-09-19 6 views
1

이 쿼리 식의 join 절을 어떻게 변경하여 을 option에 넣어도 None 일 수있는 child.ParentID 후보에 참가할 수 있습니까?쿼리 식 자체 조인

query { for parent in d.People do 
     join child in d.People on (Some parent.ID = child.ParentID) 
     exists (child.Birthdate <= parent.Birthdate) } 

고마워요!

+0

이 모델은 무성 생식 계통이라고 생각합니다 –

+0

왜 포장이 문제입니까? 데이터에 잘 맞는 것 같습니다. –

+0

이 상황과 같이 오버 헤드가 적기 때문에 추가 할당 및 생성자를 피하려고합니다. 내가 인식하지 못하는 다른 지원되고보다 효율적인 구문이 있을지 궁금하다. –

답변

3

마음에 들었을 수도 있습니다. 이이 방법에 대한 더 우아한 구문, 그리고 나는 모든 경우에, 다른 많은 것을 수행하지 않을 결국 기대하지만, 여기있다 할 수 있습니다

query { for child in d.People do 
     where (child.ParentID.IsSome) 
     join parent in d.People on (child.ParentID.Value = parent.ID) 
     exists (child.Birthdate <= parent.Birthdate) } 

은 내가 처음이 함께했다하지만, 하지 첫째 부모를 유지하고 또한, 하위 쿼리를 할 수있는 조인 조건 전에 자식 필터를 넣으려면

query { for parent in d.People do 
     join child in d.People on (parent.ID = child.ParentID.Value) 
     where (child.ParentID.IsSome) 
     exists (child.Birthdate <= parent.Birthdate) } 

,하지만 그건 나쁜 솔루션을 보였다 : 나는 그것이 None 값을 필터링하기 전에 Value를 호출하는 것을 의미인지 궁금 보다 나은. 하위 쿼리가 없어도이를 수행 할 수있는 방법을 알고 있다면 주석을 추가하십시오.