2009-06-01 5 views
5

Ceci est pas à propos de DBNull vs Null. Je comprends la différence.Lors de l'utilisation de Linq, DbNull est-il équivalent à Null?

Ce que je voudrais savoir est si j'utilise Linq, dire accéder à un User.EmailAddress, puis vérifier User.EmailAddress == null est le même que User.EmailAddress == DBNull correcte? Mon raisonnement est que l'absence de données dans la base de données aboutit à ce que Linq ne génère pas de référence d'objet, ce qui signifie alors que null est en fait équivalent à DBNull lorsqu'il est utilisé avec Linq.

Mon raisonnement est-il correct ou non?

+0

Je ne pense pas. Si null est identique à DBNull, basé sur vos résultats? – shahkalpesh

Répondre

11

Vous ne devez pas utiliser DBNull avec LinqToSql. Le point est l'intégration de la langue, et donc un concept ou un nom pour null suffira.

0

Dans LINQ to SQL, vous devez utiliser null plutôt que DBNull. LINQ to SQL est un mappeur OR, de sorte qu'il fonctionne avec les objets de manière native. Le but de L2S est de vous permettre de travailler avec des objets de manière standard .NET, et de laisser L2S gérer tout le mappage entre natif et DB spécifique pour vous. Vous devriez éviter d'utiliser DBNull dans toutes les instructions L2S ... en fait, je ne suis même pas sûr que ce soit même une vérification valide (cela causera probablement un comportement étrange si cela fonctionne du tout.)

+0

Cela répond également à une question que j'ai réfléchie mais que je n'ai pas posée: quel est le but de L2S? Il me semble (encore) qu'il est idiot de devoir apprendre une syntaxe différente quand il suffit d'invoquer SQL. Mais au moins maintenant, je comprends la raison théorique pour cela .... – RolandTumble

+0

L2S est un mappeur Object-Relational. Alors qu'il peut être facile de simplement écrire du SQL ... en l'écrivant manuellement (intégré dans votre code ou dans des procs stockés), c'est quelque chose d'autre que vous devez gérer et la version sur votre code. Les ORM suppriment la nécessité, pour la plupart, d'écrire SQL manuellement. L'avantage de ceci est que si vos objets ou votre schéma relationnel changent ... le sql s'adapte dynamiquement. Cela peut représenter un énorme gain de temps et vous permettre de mieux répondre aux besoins changeants de l'entreprise et de réaliser une plus grande adaptabilité/agilité commerciale, ce que nous, en tant que développeurs, sommes chargés de faire. – jrista

2

Voici la sélection instruction qui fonctionne dans LINQ to SQL pour Visual Basic. Je suppose que ce sera la même chose en C#.

User.EmailAdress.Equals(Nothing) 

Par exemple:

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

vous donnera tous les utilisateurs qui ont rien dans l'adresse e-mail. Pour vérifier les entrées avec l'espace « » caractères seulement ajouter

Ou

User.EmailAddress = "" 
Questions connexes