F#SQLProvider - where子句中的NULL

时间:2017-05-30 07:32:04

标签: database f# type-providers

我有一个查询,我希望在某些列中获取NULL的所有记录:

query {
    for a in db.Dbo.DataAlert do
    where (a.DateSent = null)
    select a
}

但是,这会抛出一个错误,指出null不是有效值。

编写该查询的正确方法是什么?

更新:我正在使用this SQLProvider

2 个答案:

答案 0 :(得分:3)

您可以通过指定UseOptionTypes静态参数为可为空的列生成选项类型。默认值为false,返回例如0而不是NULL。这在文档中没有很好的记录,例如Querying文档页面中没有提及,Home页面中只有一个例子。

将UseOptionTypes设置为true

type sql = SqlDataProvider< 
              ConnectionString = connectionString,
              DatabaseVendor = Common.DatabaseProviderTypes.MSSQLSERVER,
              UseOptionTypes = true
              >

可以为空的字段将返回Option类型,允许您编写:

query {
    for a in db.Dbo.DataAlert do
    where (a.DateSent = None)
    select a
}

答案 1 :(得分:1)

最简洁的方法是在另一个答案中指定useOptTypes = true。但是,这可能涉及重构其他代码。如果由于某种原因无法执行此操作,则需要检查defaultValue为null。例如,如果该列的类型为string,那么&#34;&#34;,或者如果它和int则为0.