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

谢谢!

4

1 回答 1

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

我首先想到了这个,但我想知道它是否意味着Value在过滤掉None值之前调用:

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

要保持父级优先并将子过滤器放在连接条件之前,您可以执行子查询,但这似乎是一个更糟糕的解决方案,而不是更好的解决方案。如果有人知道没有子查询的方法,请添加评论。

于 2014-09-19T23:24:33.663 回答