Rozważmy tabelę z 2 kolumnami: ID (int) and Role (string). Oba są zerowe.Zapytanie LINQ-do-SQL nie zwraca wiersza, gdy klauzula where porównuje wartość NULL
Teraz zakładamy, że dane w dwóch kolumnach jest:
ID Role
-- ----
1 NULL
2 Admin
Kwerenda wygląda następująco:
List<types> t1 = (
from a in datacontext.RoleTable
where a.Role != "Admin"
select a
).ToList();
Myślałem powyższe zapytanie należy powrocie pierwszy rekord z tabeli jako jego kolumna Role nie jest równa "Admin", ale zapytanie zwraca pustą listę.
Teraz gdy używam tej kwerendy:
List<types> t2 = (
from a in datacontext.RoleType
where a.Role != "Admin" && a.Role == DBNull.Value.ToString()
select a
).ToList();
dostaję poprawną odpowiedź.
Czy ktoś może mi powiedzieć, dlaczego pierwsze zapytanie nie działa.
FYI: Jeśli kolumna roli w pierwszym wierszu tabeli zostanie zmieniona na User
zamiast NULL
, pierwsze zapytanie działa poprawnie.
Używam SQL Express i LINQ do SQL.
Czy próbowałeś '.equals()'? –
Nie, nie o to chodzi, chcę wiedzieć, dlaczego pierwsze zapytanie nie działa zgodnie z oczekiwaniami. –