MC, 14:32 piątek, 14.09.2012 r.
Ilustracja do artykułu: .NET & Linq - Warunek na wartość pola równą/różną od null

.NET & Linq - Warunek na wartość pola równą/różną od null

Biblioteka Linq potrafi sprawiać problemy programiście. Co prawda to raczej kwestia umiejętności jej stosowania, ale czasem zderzamy się z rzeczami niespodziewanymi. O ile zwracanie szczególnej uwagi na stosowanie tylko tych funkcji, które Linq będzie potrafiło przełożyć na język SQL jest bardzo istotne, o tyle, to nie jedyne przeciwności z którymi może przyjść się zmierzyć. Ostatnio przekonałem się również, że problematyczne może być pobieranie z bazy tych rekordów, dla których pewne pola mają być różne od null-a.

W czym rzecz?

Stanąłem ostatnio przed zadaniem pobrania odpowiednich wartości z bazy danych przy pomocy biblioteki Linq. Sprawa najprostsza w świecie. Jedyny warunek jaki musiałem nałożyć na pobierane dane, to to, że jedno z pól nie mogło być nullem. Odruchowo więc stworzyłem kod podobny do poniższego:
var dane = (from rekord in kontekstBazyDanych.Rekordy
where rekord.JednoZPol != null
select rekord).Distinct().ToList();
Wykonanie powyższego kodu nie przyniosło żadnego komunikatu o błędzie, a mimo to aplikacja nie działała poprawnie. Dopiero po dłuższym czasie debuggowania zrozumiałem, że z jakiegoś powodu, nałożony warunek na pobierane dane, był zupełnie ignorowany.

Jak powinien wyglądać poprawny warunek?

Przyznam, że zdziwiłem się bardzo i do tej pory nie do końca rozumiem w czym problem. Na szczęście udało mi się znaleźć prawidłowe podejście do ograniczania danych, do wartości różnych od nulla. Poprawiony kod powinien wyglądać następująco:
var dane = (from rekord in kontekstBazyDanych.Rekordy
where !object.Equals(rekord.JednoZPol, null)
select rekord).Distinct().ToList();

Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!

Imię:
Treść: