C# Linq中长数据类型的Null检查
我正在处理一个问题,首先需要查询数据库,以确定输入记录是否会导致“重叠”日期跨度。SQL中的任务相当简单,但我似乎无法让它在Linq中工作。以下是相关的业务规则: 如果Id1==Id1且日期跨度重叠,则将冲突的记录带回给我 如果Id2==Id2且日期跨度重叠,则将冲突的记录返回给我 如果Id1==null和Id2==null且日期跨度重叠,则将冲突的记录带回 我的linq查询如下:C# Linq中长数据类型的Null检查,c#,linq,C#,Linq,我正在处理一个问题,首先需要查询数据库,以确定输入记录是否会导致“重叠”日期跨度。SQL中的任务相当简单,但我似乎无法让它在Linq中工作。以下是相关的业务规则: 如果Id1==Id1且日期跨度重叠,则将冲突的记录带回给我 如果Id2==Id2且日期跨度重叠,则将冲突的记录返回给我 如果Id1==null和Id2==null且日期跨度重叠,则将冲突的记录带回 我的linq查询如下: resultingOverlaps = (from overlapSpans in entities.ENTITI
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();
resultingOverlaps=(来自entities.entities中的重叠跨度
其中overlappSpans.CNTRCT_TYP_ID==constructed
其中(overlapspands.ID1==ID1 | | overlapSpans.Id2==Id2||
(OverlappSpans.ID1==null&&OverlappSpans.Id2==null))
在哪里(
(overlapSpans.EFF_DT=effDate)
||(OverlappSpans.EFF_DT>effDate&&OverlappSpans.EFF_DT如果entity framework将这些属性创建为“long”,这意味着该列必须在数据库中指定为“NOT NULL”
无需检查null,因为OverlappSpans.ID1和OverlappSpans.Id2永远不会为null
如果它们可以为null,则EF足够聪明,可以将它们的数据类型设置为“long?”(Nullable)
另外,键入为long的变量首先不能为null。它们的默认值为“0”(使用默认值验证(Int64)),因此如果它们为“null”,则等于“0”.你有没有研究过可空类型的HasValue?是的,我的帖子说我已经尝试过了。我的错误,我错过了那一点。你的代码是编译并运行的,还是甚至没有构建的?它编译并运行得很好,它执行这个linq查询,但是在Id1==null和Id2==null的情况下,它不会返回任何记录(它应该返回的情况很多),因此我在插入时遇到了唯一性约束错误。属性ID1和ID2有什么类型?