c# - 如何区分 sqlite-net 中的 NULL 数据和 0?

标签 c# ios sqlite xamarin sqlite-net

我正在使用 Xamarin 开发一个 iOS 应用程序。我正在使用 sqlite-net ORM 与我的数据库进行交互。

对于 Integer 列,ORM 返回一个 Int32 值。但是,此列中的值可以是 NULL。我注意到,如果是这种情况,它将返回 0 而不是 NULL,因为不可能将 int 设置为 NULL

例如,使用以下代码:

public class Client
{
    public Client ()
    {
    }

    [PrimaryKey, Column("ID")]
    public string ID{ get; set;}

    public string FirstName{ get; set;}
    public string LastName{ get; set;}
    public int    Age{ get; set;}
}

如果 ID 正确,但 FirstName、LastName 和 Age 设置为 NULL,则返回的对象的 FirstName 和 LastName 字段将为 null,这是合乎逻辑的。但是年龄将被设置为零。 所以我不知道该值是 NULL 还是 0。有没有办法区分这些情况?

最佳答案

理想情况下,您的 Client 类会告诉我们“Age”是一个不可为 null 的属性。但这里需要认识到的重要一点是,作为整数的“Age”实际上是一种值类型。

值类型不能包含空值。除非结合“?”或已经指出的“可空<>”。

在 .NET 中,字符串实际上不是值类型而是引用类型。

很狡猾,这就是为什么您在字符串属性上得到空值但在整数属性上却没有。

另一件需要注意的事情是,SQLite.NET 默认创建可为空的列,为了强制一个不可为空的列是添加属性:[NotNullAttribute] 在您的属性之上。

允许“Age”作为 null 从数据库返回的唯一原因是编写以下属性:

public class Client
{
public Client ()
{
}

public Nullable<int> Age{ get; set;}
//public int? Age { get; set; }
}

关于c# - 如何区分 sqlite-net 中的 NULL 数据和 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37186279/

相关文章:

c# - 选择对象列表中对象的属性,该对象也在另一个对象列表中

c# - 加入 3 个列表并使用 linq 计算一个 ID 在列表中的次数的最佳方法

ios - 无法快速将图像加载到单元格

ios - swift 3 : How to add or remove parameters in Request Body in ALamofire 4?

c# - 在 Entity Framework Core 方法表达式的 Select() 中调用方法

c# - 使用 XmlSerializer 时如何排除空属性

ios - 当导航栏不透明时 UIViewController View 太低

iOS - 删除应用程序时未删除应用程序文件

Python 将 UTF8 字符串插入 SQLite

sqlite - 在几列上使用MAX()获得整行