我有一个查询,我希望在某些列中获取NULL
的所有记录:
query {
for a in db.Dbo.DataAlert do
where (a.DateSent = null)
select a
}
但是,这会抛出一个错误,指出null不是有效值。
编写该查询的正确方法是什么?
更新:我正在使用this SQLProvider。
答案 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.