【发布时间】:2014-09-23 01:55:49
【问题描述】:
我正在解决一个问题,我需要先查询数据库以确定输入记录是否会导致“重叠”日期跨度。 SQL 中相当简单的任务,但我似乎无法让它在 Linq 中工作。以下是相关的业务规则:
如果 Id1 == Id1 并且日期跨度重叠,则将发生冲突的记录返回给我 如果 Id2 == Id2 并且日期跨度重叠,则将冲突的记录带回 如果 Id1 == null 和 Id2 == null 并且日期跨度重叠,则将冲突的记录带回给我。
我的 linq 查询如下:
resultingOverlaps = (from overlapSpans in entities.ENTITIES
where overlapSpans.CNTRCT_TYP_ID == contractId
where (overlapSpans.ID1 == Id1 || overlapSpans.Id2 == Id2 ||
(overlapSpans.ID1 == null && overlapSpans.Id2 == null))
where (
(overlapSpans.EFF_DT < effDate && overlapSpans.END_DT >= effDate)
|| (overlapSpans.EFF_DT > effDate && overlapSpans.EFF_DT <= endDate)
|| (overlapSpans.EFF_DT == effDate)
)
select overlapSpans).ToList();
问题在于 Id1 和 Id2 的数据类型是 long?,因此无法以这种方式或迄今为止我尝试过的任何其他方式检查 null。 (测试 0,使用 '.HasValue' 等)
如何检查具有长数据类型的空值?
【问题讨论】:
-
您是否查看过
HasValue的可空类型? msdn.microsoft.com/en-us/library/sksw8094(v=vs.110).aspx -
是的,我的帖子说我已经尝试过了。
-
我的错,我错过了那一点。你的代码是编译运行还是不编译?
-
它编译并运行得很好,它执行这个 linq 查询,但是在 Id1 == null && Id2 == null 的情况下它不返回任何记录(有很多情况它应该返回),因此我在插入时遇到了唯一性约束错误。
-
属性ID1和ID2有什么类型?