使用带有NULL DateTime字段的自定义Linq数据上下文...?

时间:2010-03-06 03:28:50

标签: c# .net linq

我有一个带有Table成员的自定义DataContext ...

条目定义为......

[Table(Name="Entry")]
public class Entry
{
  [Column]
  public DateTime MyDate { get; set; }
}

MyDate表中的Entry字段可以为NULL。

我有一个非常简单的Linq查询,它检索Entry中的所有记录但是当遇到NULL MyDate字段时,我收到System.InvalidOperationException错误,其中包含以下详细信息......

无法将null值分配给System.DateTime类型的成员,该类型是不可为空的值类型。

当遇到NULL时,有没有办法设置默认的DateTime(例如0刻度)?

3 个答案:

答案 0 :(得分:3)

如果数据库中的date为NULL,则不应在应用程序中将其替换为0。当你将0写回db时,它可能会失败或只是将值更改为无效。

您可以将DateTime替换为DateTime?:

[Table(Name="Entry")]
public class Entry
{
[Column]
public DateTime? MyDate { get; set; }
} 

添加?使属性Nullable。由于它可以在数据库中为空,因此它应该在您的模型中可以为空。

答案 1 :(得分:2)

在这种情况下,我首选的方法是可以为空的DateTime:

[Column]
public DateTime? MyDate { get; set; }

或者:

public Nullable<DateTime> MyDate { get; set; }

这不是一种选择吗?

答案 2 :(得分:0)

您能将其声明为public DateTime? MyDate { get; set; }吗?

如果你不希望它实际上是null,你可以这样做:

private DateTime _MyDate;
public DateTime? MyDate
{
    get { return _MyDate; }
    set { _MyDate = value.GetValueOrDefault(); }
}

只要DB中的值为NULL,这将为您提供0 Ticks。