2017-01-02 13 views
1

я должен преобразовать в LINQ этот SQL-запрос:Linq C#: Целое число dbnull, как я могу его проверить?

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) 

Я попытался сделать этот запрос:

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(); 

Но она всегда возвращает 0, а не другое значение !!! Как я могу сравнить с DBNull значением c.IdAttivazione и его тип является целым числом с NULL (int?)?

+0

Возможный дубликат [LEFT OUTER JOIN в LINQ] (http://stackoverflow.com/questions/3404975/left-outer-join-in-linq) –

ответ

1

Вам необходимо использовать into на вашем соединении, а затем выбрать его и использовать DefaultIfEmpty(), чтобы он мог левым соединить и сохранить все записи слева, которые не присоединились справа.

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

Я пытался, но С не существует .. ... –

+0

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

+0

@MikeVinyl Извините, я не понимаю? Вы задаете мне вопрос? – CodingYoshi

0

Вы должны быть в состоянии иметь прямой доступ к null, если IdAttiviazone - это Nullable<Int32> или можете использовать функцию HasValue.

&& c.IdAttivaZone == null 

или

&& c.IdAttivaZone.HasValue 

Зависит от того, насколько хорошо ваш LINQ к провайдеру SQL запросов работает.