2009-06-01 71 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 = ""