2009-06-01 8 views
5

Dies ist nicht über DBNull vs Null. Ich verstehe den Unterschied.Wenn Sie Linq verwenden, entspricht DbNull Null?

Was würde ich wissen, ob ich Linq verwende, sagen ein User.EmailAddress zuzugreifen, dann User.EmailAddress Überprüfung == null ist die gleiche wie User.EmailAddress == DBNull richtig?

Meine Argumentation besteht darin, dass das Fehlen von Daten in der Datenbank dazu führt, dass Linq keine Objektreferenz generiert, was dann bedeutet, dass null tatsächlich DBNull entspricht, wenn es mit Linq verwendet wird.

Ist meine Argumentation richtig oder nicht?

+0

Ich glaube nicht. Wenn null gleich DBNull ist, basierend auf Ihren Ergebnissen? – shahkalpesh

Antwort

11

Sie sollten DBNull nicht mit LinqToSql verwenden. Der Punkt ist Sprachintegration, und daher genügt ein Konzept oder ein Name für null.

0

In LINQ to SQL sollten Sie lieber Null als DBNull verwenden. LINQ to SQL ist ein OR-Mapper, also arbeitet er nativ mit Objekten. Das ganze Ziel mit L2S ist es, Ihnen zu ermöglichen, mit Objekten auf eine Standard-.NET-Weise zu arbeiten, und L2S kann die gesamte Zuordnung zwischen nativen und DB-spezifischen für Sie behandeln. Sie sollten vermeiden, DBNull in irgendwelchen L2S-Anweisungen zu verwenden ... in der Tat bin ich nicht einmal sicher, dass es sogar eine gültige Überprüfung ist (es wird wahrscheinlich etwas seltsames Verhalten verursachen, wenn es überhaupt funktioniert.)

+0

Das beantwortet auch eine Frage, über die ich nachgedacht habe, aber nicht gefragt habe: Was ist der Sinn von L2S? Es scheint mir (immer noch), dass es albern ist, eine andere Syntax zu lernen, wenn man SQL einfach aufrufen kann. Aber zumindest verstehe ich jetzt den theoretischen Grund dafür .... – RolandTumble

+0

L2S ist ein Object-Relational Mapper. Während es einfach sein kann, SQL einfach zu schreiben ... indem Sie es manuell schreiben (eingebettet in Ihren Code oder in gespeicherte Prozeduren), müssen Sie etwas anderes verwalten und über Ihrem Code versionieren. ORMs machen es größtenteils überflüssig, SQL manuell zu schreiben. Der Vorteil davon ist, dass wenn sich Ihre Objekte oder Ihr relationales Schema ändern ... passt sich der SQL dynamisch an. Es kann ein enormer Zeitaufwand sein, und Sie können besser auf sich ändernde Geschäftsanforderungen reagieren und eine größere Anpassungsfähigkeit/Agilität des Geschäfts erreichen, was wir als Entwickler ohnehin tun müssen. – jrista

2

Hier ist die Auswahl Anweisung, die in LINQ to SQL für Visual Basic funktioniert. Ich gehe davon aus, dass es in C# genauso sein wird.

User.EmailAdress.Equals(Nothing) 

Zum Beispiel:

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

geben Sie alle Benutzer, die nichts in der E-Mail-Adresse haben. Um zu überprüfen, für die Einträge mit Leerzeichen „“ Zeichen hinzufügen nur

Oder

User.EmailAddress = ""