在函数的可选参数中传递空值

时间:2013-10-18 22:28:32

标签: asp.net sql vb.net asp.net-mvc-3 null

我有一个检查我的数据库以查看记录是否已存在的函数。如果记录确实存在,那么它返回该记录的id,如果它不存在,则它创建一个新记录并返回新的id。

Friend Shared Function GetLogType(LogType As String, Optional Description As String = "")
    If GlobalVar.db.users.References.Count(Function(t) t.Description = LogType And t.DescriptionLong = Description) > 0 Then
        Return GlobalVar.db.users.References.First(Function(t) t.Description = LogType And t.DescriptionLong = Description).RefID
    Else
        Dim Ref As New Reference
        Ref.RefTypeID = 2
        Ref.Description = LogType
        Ref.DescriptionLong = Description
        Ref.Active = True
        Ref.CreateDate = Now
        Ref.UpdatedDate = Now
        GlobalVar.db.users.Entry(Ref).State = EntityState.Added
        GlobalVar.db.users.SaveChanges()
        Return GlobalVar.db.users.References.First(Function(t) t.Description = LogType And t.DescriptionLong = Description).RefID
    End If
End Function

此函数检查数据库中的两个字段以验证记录是否存在:DescriptionDescriptionLong。问题偶尔会在数据库中DescriptionLong NULL,但是当我保存新记录时,我的函数会自动为""返回值DescriptionLong。< / p>

我试图允许函数输入NULL值并通过执行以下操作检查NULL值:

Friend Shared Function GetLogType(LogType As String, Optional Description As String = "")
  Dim DescVal As String
  If Description = "" Then
    DescVal = Nothing
  Else
     DescVal = Description
  End If                

  If GlobalVar.db.users.References.Count(Function(t) t.Description = LogType And t.DescriptionLong = Description) > 0 Then
    Return GlobalVar.db.users.References.First(Function(t) t.Description = LogType And If(DescVal = Nothing, 1 = 1, t.DescriptionLong = DescVal)).RefID
  Else
    Dim Ref As New Reference
    Ref.RefTypeID = 2
    Ref.Description = LogType
    Ref.DescriptionLong = DescVal
    Ref.Active = True
    Ref.CreateDate = Now
    Ref.UpdatedDate = Now
    GlobalVar.db.users.Entry(Ref).State = EntityState.Added
    GlobalVar.db.users.SaveChanges()
    Return GlobalVar.db.users.References.First(Function(t) t.Description = LogType And If(DescVal = Nothing, 1 = 1, t.DescriptionLong = DescVal)).RefID
  End If
End Function

但是函数一起忽略NULL个值,所以如果数据库中DescriptionLongNULL,它将不会传递第一个If语句,并且该函数每次都会创建一个新记录。

基本上我想要的是可选参数DescriptionNULL> "",并让数据库返回匹配记录的id,或者创建新的id 。相反,如果数据库中DescriptionLongNULL且函数中DescValNothing,则无论具有相同值的记录是否每次都会创建新记录已存在于数据库中。

我发现的另一个解决方案是,如果我允许函数简单地将Description作为""传递,它确实有效,但这并不理想。

1 个答案:

答案 0 :(得分:1)

试试这个::

GlobalVar.db.users.References.First(Function(t) 
    t.Description = LogType And 
    t.DescriptionLong = If(DescVal = Nothing, t.DescriptionLong, DescVal)).RefID

这将解决您的问题。