2017-01-02 4 views
1

ich in Linq diese Abfrage SQL umwandeln müssen:Linq C#: Integer dbnull Wert Wie kann ich es überprüfen?

SELECT DISTINCT COUNT(tab1.IdUtente) AS NumClientiSenzaAccessi 
FROM tab1 LEFT OUTER JOIN tab2 ON tab1.IdUtente = tab2.IdAttivazione 
WHERE (tab1.Demo = 0) AND (tab1.idRivenditore = 0) AND (tab1.IdGruppo <> 29) AND (tab1.IdGruppo <> 130) AND (tab1.IdGruppo <> 117) AND (tab2.IdAttivazione IS NULL) 

Ich habe versucht, diese Abfrage zu tun:

var numClienti = (from u in contestoDB.tab1 
join c in contestoDB.tab2 on u.IdUtente equals c.IdAttivazione 
where u.Demo == demo && u.idRivenditore == 0 && u.IdGruppo != 29 && u.IdGruppo != 130 && u.IdGruppo != 117 && (c.IdAttivazione.ToString() == null) 
select u.IdUtente 
).Count(); 

Aber es gibt immer 0 und nicht anderen Wert !!! Wie kann ich mit DBNull Wert von c.IdAttivazione vergleichen und sein Typ ist Nullable Ganzzahl (int?)?

+0

Mögliche Duplikat [LEFT OUTER JOIN in LINQ] (http://stackoverflow.com/questions/3404975/left-outer-join-in-linq) –

Antwort

1

Sie müssen verwenden into auf Ihrem verbinden und dann von der Auswahl und Benutzung der DefaultIfEmpty() so kann es eine linke trete und alle Datensätze aus der linken halten, die nicht auf der rechten Seite kommen haben.

var numClienti = (from u in contestoDB.tab1 
join c in contestoDB.tab2 on u.IdUtente equals c.IdAttivazione into uc 
from ucc in uc.DefaultIfEmpty() 
where u.Demo == demo && u.idRivenditore == 0 && u.IdGruppo != 29 && u.IdGruppo != 130 && u.IdGruppo != 117 && (ucc.IdAttivazione.ToString() == null) 
select u.IdUtente 
).Distinct().Count(); 
+0

Ich habe versucht, aber c existiert nicht .. ... –

+0

(c.IdAttivazione.ToString() == null) => (ucc.IdAttivazione.ToString() == null) –

+0

@MikeVinyl Sorry, verstehe ich nicht? Stellen Sie mir eine Frage? – CodingYoshi

0

Sie sollten in der Lage sein, entweder direkt mit null zu vergleichen, wenn IdAttiviazone eine Nullable<Int32> ist, oder die Eigenschaft HasValue zu verwenden.

&& c.IdAttivaZone == null 

oder

&& c.IdAttivaZone.HasValue 

Hängt davon ab, wie gut Ihre Linq zu SQL-Abfrage-Provider arbeitet.

Verwandte Themen