我正在研究一个问题,我需要首先查询数据库,以确定输入记录是否会导致“重叠”日期跨度。在SQL中相当简单的任务,但我似乎无法让它在Linq中工作。以下是相关的业务规则:
如果Id1 == Id1且datepans重叠,则将我带回冲突的记录 如果Id2 == Id2且日期空间重叠,则将我带回冲突的记录 如果Id1 == null且Id2 == null且datepans重叠,则将带回冲突的记录带回来。
我的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'等)
如何检查具有长数据类型的空值?
答案 0 :(得分:0)
如果实体框架将这些属性创建为“long”,则意味着必须在数据库中将该列指定为“NOT NULL”。
不需要检查null,因为overlapSpans.ID1和overlapSpans.Id2永远不会为空。
如果它们可以为null,那么EF足够聪明,可以使它们的数据类型“长”吗? (Nullable&lt; Int64&gt;)。
同样,类型为long的变量首先不能为null。它们的默认值为“0”(使用默认值(Int64)进行验证),因此如果它们为“null”,则它们将等于“0”。