Linq2Sql, присоединение к возможным пустым полям - PullRequest
0 голосов
/ 12 ноября 2010

Я пытаюсь выполнить соединение, которое может объединиться с возможным нулевым значением.

from data in Data
join d1 in Data on new { a = data.pId, b = language } equals new { a = d1.pId, b = d1.language } into j1
from dta1 in j1.DefaultIfEmpty()
join d2 in Data on new { a = data.pId, b = fallback} equals new { a = d2.pId, b = d2.language } into j2
from dta2 in j1.DefaultIfEmpty()
where ((int?)dta1.id ?? dta2.id) == data.Id
select data;

Проблема здесь в том, что pId может быть нулевым, и если это так, объединение не будет совпадать при сравнении

data.pId = null

вместо

data.pId is null

В обычном предложении where я мог бы сделать object.Equals (data.pId, d1.pId), и он мог бы выполнить нулевую проверку, но как я могу сделать это в соединении?

1 Ответ

0 голосов
/ 13 ноября 2010

Один из подходов - преобразовать нулевое значение в другое неиспользуемое, но при этом равное значение.

join d1 in Data
  on new { a = data.pId ?? -33, b = language }
  equals new { a = d1.pId ?? -33, b = d1.language }
  into j1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...