我有一个检查我的数据库以查看记录是否已存在的函数。如果记录确实存在,那么它返回该记录的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
此函数检查数据库中的两个字段以验证记录是否存在:Description
和DescriptionLong
。问题偶尔会在数据库中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
个值,所以如果数据库中DescriptionLong
为NULL
,它将不会传递第一个If语句,并且该函数每次都会创建一个新记录。
基本上我想要的是可选参数Description
为NULL
或> ""
,并让数据库返回匹配记录的id,或者创建新的id 。相反,如果数据库中DescriptionLong
为NULL
且函数中DescVal
为Nothing
,则无论具有相同值的记录是否每次都会创建新记录已存在于数据库中。
我发现的另一个解决方案是,如果我允许函数简单地将Description
作为""
传递,它确实有效,但这并不理想。
答案 0 :(得分:1)
试试这个::
GlobalVar.db.users.References.First(Function(t)
t.Description = LogType And
t.DescriptionLong = If(DescVal = Nothing, t.DescriptionLong, DescVal)).RefID
这将解决您的问题。