2009-06-01 113 views
5

这是有关的DBNull VS空。我明白不同之处。使用Linq时,DbNull是否等于空?

我想知道的是,如果我使用LINQ,说访问User.EmailAddress,然后检查User.EmailAddress == NULL是相同作为User.EmailAddress == DBNull的正确吗?

我的理由是,由于没有在数据库中的结果数据的进入的LINQ不产生对象的引用,其然后意味着与LINQ的使用时null是实际上等同于为DBNull。

是我的推理正确与否?

+0

我不这么认为。根据你的发现,如果null与DBNull相同? – shahkalpesh 2009-06-01 20:12:58

回答

11

你不应该LinqToSql使用的DBNull。关键是语言集成,因此null的一个概念或名称就足够了。

0

在LINQ to SQL,你应该使用空,而不是DBNull的。 LINQ to SQL是一个OR映射器,因此它以本地方式处理对象。 L2S的全部目标是允许您使用标准.NET方式处理对象,并让L2S处理本机和特定于您的数据库之间的所有映射。应避免在任何L2S语句中使用的DBNull ......其实,我甚至相信,即使是一个有效的检查(这可能会导致一些奇怪的行为,如果它工作在所有。)

+0

这也回答了我一直在思考的问题,但没有问:L2S有什么意义?在我看来(仍然),仅仅调用SQL非常简单,学习不同的语法是很愚蠢的。但至少现在我明白了它的理论原因.... – RolandTumble 2009-06-01 22:51:00

2

这里的选择语句适用于Visual Basic的LINQ to SQL。我认为它将在C#中是相同的。

User.EmailAdress.Equals(Nothing) 

例如:

Dim EmptyEmailAddressEntries = From User in DC.Users _ 
    Where User.EmailAddress.Equals(Nothing) select User 

会给你一个什么都没有的电子邮件地址的所有用户。要检查与空间“”项角色只加

或者

User.EmailAddress = ""