处理实体框架查询中的空日期

时间:2013-10-11 19:03:30

标签: asp.net vb.net linq datetime linq-to-entities

请使用linq从数据库中提取一些数据到实体。从查询结果中我创建一个集合并绑定到gridview控件.Problem位于数据库的日期列之一,其中一些值为null,当我做了一个tostring它给了我一个例外。下面是我用来获取数据库数据的第一个查询。

    Dim sSession = From ses In DemoSchool.Terms
                   Select New With {Key .Session = ses.Session,
                                    Key .Term = ses.Term1,
                                    Key .StartDate = ses.StartDate,
                                    Key .EndDate = ses.EndDate,
                                    Key .NextTerm = ses.NextTerm}

然后从这个结果我做一个选择以获取列,以便我可以将格式化应用于日期时间列

  Dim query = (From estty In sSession Select estty).ToList() _
              .Select(Function(essty) New With {.Session = essty.Session,
                                 .Term = essty.Term,
                                 .StartDate = essty.StartDate.ToString("ddd d MMM yyyy"),
                                 .EndDate = CDate(essty.EndDate).ToString("ddd d MMM yyyy"),
                                 .NextTerm = CDate(essty.NextTerm).ToString("ddd d MMM yyyy")})

问题来自最后两个语句,因为数据库中的这个列包含空值,我认为CDate方法会起作用但事实证明我错了。     (这是抛出错误的地方).EndDate = CDate(essty.EndDate).ToString(“ddd d MMM yyyy”),                                      .NextTerm = CDate(essty.NextTerm).ToString(“ddd d MMM yyyy”)})

第二个查询结果被绑定到gridview,就像这样     grdShowSession.DataSource = query     grdShowSession.DataBind() 显示的错误是Nullable对象必须具有值。我需要帮助。

1 个答案:

答案 0 :(得分:0)

Yo可以创建一个返回带有

元素的字符串的函数
Function returnElementString As String(element As Objec)
    If IsNothing(element) Then
       return "whatever"
    Else 
       return CDate(element).ToString("ddd d MMM yyyy")
    End If
End Function

在您的代码中,您将使用例如:

.EndDate = returnElementString(essty.EndDate)