2012-05-25 11 views
10

Używam PetaPoco Micro-ORM z C# 4.0.Jak sprawdzić var ​​dla wartości pustej?

Poniższy kod pobiera jeden wiersz z bazy danych:

var result = db.SingleOrDefault<TdUsers>(getUserQuery); 

Chciałbym sprawdzić, czy wynik zawiera żadnych wierszy, a także czy jest null. Jaki jest najlepszy sposób na zrobienie tego?

+0

Co masz? – sehe

Odpowiedz

15
if (result != null || result.Count() == 0) { 
    // Checks whether the entire result is null OR 
    // contains no resulting records. 
} 

Myślę, że problem nie jest w czeku dla null, ponieważ LINQ jest leniwy załadunku. Twój błąd jest w użyciu wyrażenie db.SingleOrDefault<TdUsers>(getUserQuery);.

.Single<T>(expression) nie zwraca wartości null - to błąd, jeśli wynik nie zwraca żadnych wartości. .SingleOrDefault<T>(expression) zwraca jednak wartość pustą, jeśli wyrażenie nie zawiera żadnych wartości - i dlatego najlepiej jest połączyć ją z sprawdzeniem typu if (result == null), tak jak tutaj.

+0

Wypróbowany wynik! = Null, ale wyświetla "Odwołanie do obiektu nie jest ustawione na instancję obiektu". – RKh

+3

@RPK - czy możesz umieścić swój kod w pytaniu. To powinno działać. – ChrisF

+0

Edytowałem moje ans –

1
var v = result.ToList(); 

teraz sprawdzić

if (v.Count > 0) 
+0

Zobacz mój komentarz do powyższej odpowiedzi. –

3

Można zrobić:

result.ToList() // Convert result to a list 

if (result.Any()) { 
    // result is not null 
} 
+0

BRAK wyniku == null nie zawsze będzie fałszywy. Jak myślisz, jaka jest domyślna wartość dowolnego typu referencyjnego? –

+0

@ParvSharma - poprawne, dostosowane. –

+0

:) .................... –

3
var result = db.SingleOrDefault<TdUsers>(getUserQuery); 

w kodzie powyżej SingleOrDefault powróci zerowej vale lub określony typu rodzajowego (nie jest to znany na środowisko wykonawcze).

Inorder, by sprawdzić, czy wartości zwracane jest null lub nie można po prostu użyć

if(result!=null) 
{ 
//do your code stuff 
} 
else 
{ 
//stuff do be done in case where result==null 
} 
Powiązane problemy