我正在从API加载数据,其中某些字段具有for x in myList do
let item = db.Dbo.Item.Create()
item.Name <- x.Name
item.Description <- x.Description // Description might be NULL
db.SubmitUpdates()
值 - 这是预期的。在将数据(对象)加载到列表中之后,我将遍历列表并使用SQLProvider将每个对象存储到数据库中。
if x.Description |> isNull |> not then
item.Description <- x.Description
但是,这会失败并显示错误,指出并非所有查询参数值都已提供。
作为一种解决方法,我现在在下面执行此操作,但是在包含大量列的表中会非常烦人。
t=# with cte as (
SELECT *
, date_trunc('day', b."createdAt") as day
, "createdAt" = max(b."createdAt") over (partition by date_trunc('day', b."createdAt"),"deviceId") cond
, max(b."createdAt") over (partition by date_trunc('day', b."createdAt"), "deviceId") latest
FROM devicedata b
WHERE "createdAt" BETWEEN '2017-05-24' AND '2017-05-27'
)
select meta,"day","deviceId", latest
from cte
where cond
;
meta | day | deviceId | latest
------+---------------------+----------+---------------------
{} | 2017-05-24 00:00:00 | 1 | 2017-05-24 07:00:00
{} | 2017-05-24 00:00:00 | 2 | 2017-05-24 08:00:00
{} | 2017-05-25 00:00:00 | 1 | 2017-05-25 12:00:00
{} | 2017-05-25 00:00:00 | 3 | 2017-05-25 07:00:00
(4 rows)
有没有办法避免这种空检查?
答案 0 :(得分:2)
F#和SQL Type提供程序尝试使用Option而不是Nullable 我通常有一个小函数,用于将Null转换为None,并将值转换为Some值 有关该主题的更多详细信息,请参阅FSharp for fun and profit。