2014-09-19 61 views
1

如何更改此查詢表達式的join子句,以便我不必將parent.ID換成option只是爲了加入候選child.ParentID可能是None查詢表達式自我加入

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

謝謝!

+0

我想這個模型是無性生物的血統 – 2014-09-19 18:27:31

+0

爲什麼包裹是個問題?它似乎很適合數據。 – 2014-09-19 18:43:04

+0

我只是想避免額外的分配和構造函數,因爲這種情況可能是低開銷的。我想知道是否可能有另一種我不知道的支持和更高效的語法。 – 2014-09-19 20:49:08

回答

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

我第一次來到了這一點,但我不知道這是否意味着過濾掉None值之前調用Value

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

要首先保持父,也把孩子過濾器的加入條件之前,你可以做一個子查詢,但似乎是一個糟糕的解決方案,而不是更好。如果有人知道沒有子查詢的方式,請添加評論。