2009-06-01 8 views
5

To jest nie o DBNull kontra Null. Rozumiem różnicę.Podczas używania Linq, czy DbNull jest równoważne zeru?

Co chciałbym wiedzieć, czy używam Linq, powiedzmy dostępu do User.EmailAddress, a następnie sprawdzanie User.EmailAddress == null jest samo jak User.EmailAddress == DBNull prawidłowe?

Moje rozumowanie jest takie, że brak danych w wynikach bazy danych powoduje, że Linq nie generuje referencji do obiektu, co oznacza, że ​​wartość null jest w rzeczywistości równoważna DBNull, gdy jest używana z Linq.

Czy moje rozumowanie jest poprawne, czy nie?

+0

Nie sądzę. Jeśli null jest taki sam jak DBNull, na podstawie twoich ustaleń? – shahkalpesh

Odpowiedz

11

Nie powinieneś używać DBNull z LinqToSql. Chodzi o integrację językową, więc wystarczy jedna koncepcja lub nazwa dla null.

0

W LINQ do SQL powinieneś używać wartości null zamiast DBNull. LINQ to SQL to OR mapper, więc działa z obiektami w natywny sposób. Cały cel z L2S polega na umożliwieniu pracy z obiektami w standardowy sposób .NET i pozwala L2S obsłużyć wszystkie mapowania między rodzimym i DB specyficzne dla ciebie. Powinieneś unikać używania DBNull w jakichkolwiek instrukcjach L2S ... w rzeczywistości nie jestem nawet pewien, czy jest to nawet ważna weryfikacja (prawdopodobnie spowoduje to dziwne zachowanie, jeśli w ogóle działa).

+0

To również odpowiada na pytanie, które rozważałem, ale nie pytałem: jaki jest sens L2S? Wydaje mi się (nadal), że głupotą jest nauczenie się innej składni, gdy samo wywoływanie SQL jest tak proste. Ale przynajmniej teraz rozumiem teoretyczny powód tego ... – RolandTumble

+0

L2S jest programem mapującym obiekty. Chociaż łatwo można po prostu napisać kod SQL ... pisząc go ręcznie (osadzony w kodzie lub w zapisanych procesach), to jest coś, co trzeba zarządzać i wersję na górze kodu. ORMy usuwają potrzebę, w większości przypadków, ręcznego pisania SQL. Zaletą tego jest to, że jeśli zmieniają się twoje obiekty lub twój schemat relacyjny ... sql dostosowuje się dynamicznie. Może to być ogromna oszczędność czasu i lepiej pozwala sprostać zmieniającym się wymaganiom biznesowym i osiągnąć większą zdolność dostosowywania się do potrzeb firmy, na co i tak nam się kieruje. – jrista

2

Oto wybór instrukcja, która działa w LINQ do SQL dla Visual Basic. Zakładam, że będzie to samo w C#.

User.EmailAdress.Equals(Nothing) 

Na przykład:

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

daje wszystkich użytkowników, którzy nic w adresie e-mail. Aby sprawdzić wpisy z miejsca „” znaków tylko dodać

Or

User.EmailAddress = "" 
Powiązane problemy