左外连接中的可空日期时间
Nullable DateTime in Left Outer Join
我正在尝试在 3 个表之间执行左外连接。但是,在创建输出时,出现 NullReferenceException。
我通过检查日期是否为 null 并将日期时间转换为可为 null 的值尝试了以下几个选项。
如何对 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
};
如果 A 中的 t1
行与 B 中的任何行都不匹配,则外部联接会创建具有 t1
但 t2
为空的输出。
然后t2.issueDate
会抛出一个NullReferenceException
。
你可以在 c#6:
之前写这样的东西
standbyReturnedBeforeTarget = t2 == null ? (DateTime?)null : t2.issueDate
在 C#6 中:
standbyReturnedBeforeTarget = t2?.issueDate
我正在尝试在 3 个表之间执行左外连接。但是,在创建输出时,出现 NullReferenceException。
我通过检查日期是否为 null 并将日期时间转换为可为 null 的值尝试了以下几个选项。
如何对 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
};
如果 A 中的 t1
行与 B 中的任何行都不匹配,则外部联接会创建具有 t1
但 t2
为空的输出。
然后t2.issueDate
会抛出一个NullReferenceException
。
你可以在 c#6:
standbyReturnedBeforeTarget = t2 == null ? (DateTime?)null : t2.issueDate
在 C#6 中:
standbyReturnedBeforeTarget = t2?.issueDate