Выражение запроса самостоятельное соединение

Как я могу изменить это выражение запроса 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) }

Чтобы сначала сохранить родительский, а также поместить дочерний фильтр перед условием соединения, вы можете выполнить подзапрос, но это казалось худшим решением, а не лучшим. Если кто-то знает способ сделать это без подзапроса, пожалуйста, добавьте комментарий.

Другие вопросы по тегам