Null检查Linq中的长数据类型

时间:2014-09-17 20:52:06

标签: c# linq

我正在研究一个问题,我需要首先查询数据库,以确定输入记录是否会导致“重叠”日期跨度。在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'等)

如何检查具有长数据类型的空值?

1 个答案:

答案 0 :(得分:0)

如果实体框架将这些属性创建为“long”,则意味着必须在数据库中将该列指定为“NOT NULL”。

不需要检查null,因为overlapSpans.ID1和overlapSpans.Id2永远不会为空。

如果它们可以为null,那么EF足够聪明,可以使它们的数据类型“长”吗? (Nullable&lt; Int64&gt;)。

同样,类型为long的变量首先不能为null。它们的默认值为“0”(使用默认值(Int64)进行验证),因此如果它们为“null”,则它们将等于“0”。