(obj != null) 不起作用



它的接缝简单,但我真的不明白。我正在使用Linq和实体框架来通过像这样的简单查询从数据库中检索对象

loggedinUser = (from user in context.Users
                 where user == _guid
                 select user).ToList()[0];

我知道我可以使用.FirstOrDefault(),但是我认为我的问题与我获得用户的方式有关。

获得用户后,如果我使用此条件检查

if (loggedinUser != null)
   {
     ToLocation = String.Format("{0} {1} {2} {3}", loggedinUser.StreetAddress,loggedinUser.City, loggedinUser.Province, loggedinUser.PostalCode);
   }

它不起作用,好像是 null,但不是。

if (loggedinUser == null)
{ }
else
{
  ToLocation = String.Format("{0} {1} {2} {3}", loggedinUser.StreetAddress,loggedinUser.City, loggedinUser.Province, loggedinUser.PostalCode);
}

我始终使用这种类型的条件(Obj != null),并且可以使用它,答案应该很简单,但是我真的不知道这次不是。我想念什么吗?

唯一的一点是该实体的类位于另一个项目中。这是问题吗?

该类位于vb.net中的项目:

<Table("Users")>
Public Class User
<Key()>
Public Property UserID As Integer
Public Property Username As String
Public Property PasswordEncrypted As String
Public Property LastLogin As DateTime 
Public Property CreatedByUserID As Integer
Public Property DateCreated As DateTime
Public Property Deleted As Boolean '?
Public Property Email As String
Public Property StreetAddress As String
Public Property City As String
Public Property Province As String
Public Property PostalCode As String
<NotMapped()>
Public Property Lat As Double
<NotMapped()>
Public Property Lon As Double
Public Property GUID As String
<NotMapped()>
Public Property EULAAgreed As DateTime
Public Overrides Function ToString() As String
    Return Username
End Function
Public Overrides Function Equals(ByVal obj As Object) As Boolean
    If (obj Is System.DBNull.Value) Then
        Return MyBase.Equals(obj)
    ElseIf (TypeOf obj Is String) Then
        Return MyBase.Equals(obj)
    Else
        Try
            Return UserID = CType(obj, Entities.User).UserID
        Catch ex As Exception
            Return UserID
        End Try
    End If
End Function

结束类

这是因为linq-sql/ef不会给您无效。他们给你dbnull。

更改您的比较:

if (loggedinUser != DBNull.Value)

您可能有这样的代码:

if (loggedinUser != null)
    doSomething();
    doSomethingElse();

问题是if的范围以第一个语句结束。如果您有多个语句,请包括括号。

if (loggedinUser != null)
{
    doSomething();
    doSomethingElse();
}

尽管您得到了问题的答案。但是这些答案仍然值得一读。

好吧,null不是任何类型的实例。相反,这是无效的参考。

但是,system.dbnull.value,是对system.dbnull的实例的有效引用(system.dbnull是一个singleton and system.dbnull.value,可为您提供代表非X.*数据库中的值。

*我们通常会说null,但我不想混淆问题。

因此,两者之间存在很大的概念区别。关键字null表示无效的参考。class system.dbnull代表数据库字段中不存在的值。通常,我们应该尝试避免使用相同的东西(在这种情况下为null)来表示两个非常不同的概念(在这种情况下,在数据库字段中是无效的参考值与不存在的值)。

请记住,这就是为什么许多人通常提倡使用null对象模式的原因,这正是系统。dbnull是。

的示例。

原始来源

MARC在DBNULL的意义是什么?

相关内容

最新更新