Null检查Linq中的长数据类型

本文关键字:数据类型 检查 Linq Null | 更新日期: 2023-09-27 18:22:19

我正在处理一个问题,需要首先查询数据库,以确定输入记录是否会导致日期跨度"重叠"。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的数据类型长?,因此无法以这种方式或我迄今为止尝试过的任何其他方式检查是否为空。(测试0,使用".HasValue"等)

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

Null检查Linq中的长数据类型

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

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

如果它们可以为null,EF就足够聪明,可以使它们的数据类型"长?"(Nullable<Int64>)。

此外,类型为long的变量一开始就不能为null。它们的默认值为"0"(使用默认值(Int64)进行验证),因此如果它们为"null",则等于"0"。