F#SQLProvider - 为字段分配NULL值

时间:2017-05-30 07:52:41

标签: database f# type-providers

我正在从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)

有没有办法避免这种空检查?

1 个答案:

答案 0 :(得分:2)

F#和SQL Type提供程序尝试使用Option而不是Nullable 我通常有一个小函数,用于将Null转换为None,并将值转换为Some值 有关该主题的更多详细信息,请参阅FSharp for fun and profit