2009-06-01 17 views
5

Questo è non su DBNull vs Null. Capisco la differenza.Quando si utilizza Linq, DbNull è equivalente a Null?

Quello che vorrei sapere è se sto usando LINQ, dire per accedere a un User.EmailAddress, poi controllando User.EmailAddress == null è lo stesso come User.EmailAddress == DBNull corretta?

Il mio ragionamento è che l'assenza di dati nel database risulta in Linq che non genera un riferimento a un oggetto, il che significa quindi che null è in effetti equivalente a DBNull quando utilizzato con Linq.

Il mio ragionamento è corretto o no?

+0

io non la penso così. Se null è uguale a DBNull, in base ai risultati? – shahkalpesh

risposta

11

Non utilizzare DBNull con LinqToSql. Il punto è Integrazione linguistica, quindi è sufficiente un concetto o un nome per null.

0

In LINQ a SQL, si dovrebbe utilizzare null anziché DBNull. LINQ to SQL è un mapper OR, quindi funziona con gli oggetti in modo nativo. L'intero obiettivo di L2S è quello di consentire di lavorare con gli oggetti in un modo .NET standard e lasciare che L2S gestisca tutto il mapping tra nativo e DB specifico per te. Si dovrebbe evitare di utilizzare DBNull in qualsiasi istruzione L2S ... infatti, non sono nemmeno sicuro che sia un controllo valido (probabilmente causerà qualche comportamento strano se funziona a tutti.)

+0

Questo risponde anche a una domanda che ho riflettuto, ma non ho chiesto: qual è il punto di L2S? Mi sembra (ancora) che sia sciocco dover imparare una sintassi diversa quando basta invocare SQL è così facile. Ma almeno ora capisco la ragione teorica per questo ... – RolandTumble

+0

L2S è un Object Relational Mapper. Mentre può essere facile scrivere semplicemente SQL ... scrivendolo manualmente (incorporato nel tuo codice o nei proc memorizzati) è qualcos'altro che devi gestire e versione in cima al tuo codice. Gli ORM eliminano la necessità, per la maggior parte, di scrivere manualmente SQL. Il vantaggio di questo è che se gli oggetti o lo schema relazionale cambiano ... lo sql si adatta in modo dinamico. Può essere un enorme risparmio di tempo, e meglio consente di soddisfare i mutevoli requisiti di business e ottenere una maggiore adattabilità/agilità aziendale, cosa a cui noi, in qualità di sviluppatori, abbiamo comunque il compito. – jrista

2

Ecco la selezione dichiarazione che funziona in LINQ to SQL per Visual Basic. Presumo che sarà lo stesso in C#.

User.EmailAdress.Equals(Nothing) 

Ad esempio:

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

vi darà tutti gli Utenti che non hanno nulla in indirizzo di posta elettronica. Per verificare la presenza di voci con lo spazio "" i caratteri solo aggiungere

O

User.EmailAddress = "" 
Problemi correlati