Выражение запроса самостоятельное соединение
Как я могу изменить это выражение запроса 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) }
Спасибо!
1 ответ
Решение
Вам может понравиться это. Для этого подхода может быть более элегантный синтаксис, и я ожидаю, что в итоге он не будет работать по-другому, если вообще будет, но вот он:
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) }
Чтобы сначала сохранить родительский, а также поместить дочерний фильтр перед условием соединения, вы можете выполнить подзапрос, но это казалось худшим решением, а не лучшим. Если кто-то знает способ сделать это без подзапроса, пожалуйста, добавьте комментарий.