2009-06-01 19 views
5

Esto es no sobre DBNull vs Null. Entiendo la diferenciaCuando se usa Linq, ¿DbNull es equivalente a Nulo?

Lo que me gustaría saber es si estoy utilizando LINQ, por ejemplo para acceder a una User.EmailAddress, a continuación, comprobar User.EmailAddress == null es la misma como User.EmailAddress == DBNull correcta?

Mi razonamiento es que la ausencia de datos en la base de datos da como resultado que Linq no genere una referencia de objeto, lo que significa que null es de hecho equivalente a DBNull cuando se usa con Linq.

¿Mi razonamiento es correcto o no?

+0

Yo no lo creo. Si null es lo mismo que DBNull, ¿en base a sus hallazgos? – shahkalpesh

Respuesta

11

No debe usar DBNull con LinqToSql. El punto es la Integración de idiomas, por lo que un concepto o nombre para null será suficiente.

0

En LINQ to SQL, debe utilizar null en lugar de DBNull. LINQ to SQL es un asignador O, por lo que funciona con objetos de forma nativa. Todo el objetivo con L2S es permitirle trabajar con objetos de una manera .NET estándar, y dejar que L2S maneje toda la correspondencia entre nativo y específico de DB para usted. Debería evitar el uso de DBNull en cualquier declaración L2S ... de hecho, ni siquiera estoy seguro de que sea siquiera una verificación válida (es probable que cause un comportamiento extraño si funciona)

+0

Esto también responde una pregunta que he estado reflexionando pero que no he preguntado: ¿qué sentido tiene L2S? Me parece (todavía) que es una tontería tener que aprender una sintaxis diferente cuando invocar SQL es tan fácil. Pero al menos ahora entiendo la razón teórica para ello ... – RolandTumble

+0

L2S es un asignador relacional de objetos. Si bien puede ser fácil simplemente escribir SQL ... escribiéndolo manualmente (incrustado en su código o en los procesos almacenados) es algo más que tiene que administrar y la versión en la parte superior de su código. Los ORM eliminan la necesidad, en su mayor parte, de escribir SQL manualmente. El beneficio de esto es que si sus objetos o su esquema relacional cambian ... el sql se adapta dinámicamente. Puede ser un gran ahorro de tiempo, y mejor le permite cumplir con los cambiantes requisitos comerciales y lograr una mayor adaptabilidad/agilidad empresarial, lo que nosotros, como desarrolladores, tenemos la tarea de todos modos. – jrista

2

Aquí está la selección declaración que funciona en LINQ to SQL para Visual Basic. Supongo que será lo mismo en C#.

User.EmailAdress.Equals(Nothing) 

Por ejemplo:

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

le dará todos los usuarios que no tienen nada en la dirección de correo electrónico. Para comprobar si hay entradas con el espacio "" caracteres sólo se suman

O

User.EmailAddress = "" 
Cuestiones relacionadas