#f# #f#-3.0 #query-expressions
#f# #f #-3.0 #запрос-выражения
Вопрос:
Рассмотрим следующие две таблицы по 3 столбца в каждой:
Таблица 1:
a INTEGER NOT NULL,
b INTEGER NOT NULL,
c INTEGER NOT NULL
Таблица 2:
d INTEGER NOT NULL,
e INTEGER,
f INTEGER NOT NULL
Я пытаюсь написать выражение запроса, которое объединяет две таблицы по составному ключу из 2 частей : (b, c) = (e, f)
.
Я знаю, что если бы столбца e
не Nullable
было, я мог бы просто написать:
query {
for r1 in c.table1 do
join r2 in c.table2 on ((r1.b, r1.c) = (r2.e, r2.f))
.
.
}
Но как мне это сделать, если столбец e
есть Nullable
, а столбец b
нет?
Комментарии:
1. Выстрел в темноте, но что произойдет, если вы попробуете
r2.e.Value
вместоr2.e
того, чтобы внутри кортежа?2. Ну, я думаю то же самое, что и я
((Nullable(r1.b), r1.c) = (r2.e, r2.f))
: в основном исключение, еслиr2.e
естьNull
. Я думаю, что нам здесь нуженNullable
тип кортежа, чтобы?=
его можно было использовать.3. Какое исключение вы видите используемым
Nullable(r1.b)
? Это не должно быть исключением с нулевой ссылкой, поскольку сравнения на равенство допустимы даже для нулевых значений.4. @kvb: Это
InvalidOperationException
.5. Мне жаль, что это моя ошибка. Исключение возникает из-за того, что я вызываю
head
исключение запроса после объединения, а последовательность пуста. Так что, я думаюNullable(r1.b)
, действительно работает.