2015-11-08 54 views
0

我试图在3个表之间执行左外部联接。但是,在创建输出时,会发生NullReferenceException。可空的DateTime在左外部联接

我已经尝试了几个选项,检查日期是否为空,并将日期时间转换为可为空的值。

如何在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行中的不匹配B中的任何行,外部连接创建与t1t2是空的输出。 然后t2.issueDate会抛出NullReferenceException。 你可以写这样的事情之前,C#6:

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

而在C#6:

standbyReturnedBeforeTarget = t2?.issueDate