2015-11-08 7 views
0

Я пытаюсь выполнить левое внешнее соединение между 3 таблицами. Однако при создании вывода возникает исключение NullReferenceException.Nullable DateTime in Left Outer Присоединиться

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

Как вы выполняете столбцы Left Outer Join on DateTime?

var query = from t1 in A 
    join t2 in B 
    on t1.newAsset equals t2.newAsset into grp1 
    join t3 in C 
    on t1.newAsset equals t3.newAsset into grp2 
    from t2 in grp1.DefaultIfEmpty() 
    from t3 in grp2.DefaultIfEmpty() 
    select new 
    { 
     asset = t1.newAsset, 
     standbyIssuedBeforeTarget = t1.issueDate 
     standbyReturnedBeforeTarget = (DateTime?)t2.issueDate // Tried casting to a nullable date 
     //standbyReturnedDuringTarget = (t3.issueDate == null ? SqlDateTime.Null : t3.issueDate) // Tried comparing issueDate to null 
    }; 

ответ

0

Если t1 строка A не совпадает ни строки в B, внешнее соединение создает выход с t1 но t2 равна нулю. Затем t2.issueDate будет кидать NullReferenceException. Вы можете написать что-то вроде этого до C# 6:

standbyReturnedBeforeTarget = t2 == null ? (DateTime?)null : t2.issueDate 

И в C# 6:

standbyReturnedBeforeTarget = t2?.issueDate 
Смежные вопросы