C# Linq到SQL左连接,where子句查找条件或null

C# Linq到SQL左连接,where子句查找条件或null,c#,linq-to-sql,C#,Linq To Sql,我需要从两个表中选择记录,使用左连接。那部分很好。但是,在where子句中,我需要选择t2.fromDate>20190101或t2.fromDate为null的位置 问题是在c中,t2.fromDate是一个int,而不是一个可为null的int。我应该如何将t2.fromDate与null进行比较?我尝试过t2.fromDate==0,但这不起作用,因为在SQL中,该值为null,但在C is中,该值应为int int FromDate = 20190101; var data = (fro

我需要从两个表中选择记录,使用左连接。那部分很好。但是,在where子句中,我需要选择t2.fromDate>20190101或t2.fromDate为null的位置

问题是在c中,t2.fromDate是一个int,而不是一个可为null的int。我应该如何将t2.fromDate与null进行比较?我尝试过t2.fromDate==0,但这不起作用,因为在SQL中,该值为null,但在C is中,该值应为int

int FromDate = 20190101;
var data = (from hi in DbContext.t1
        from fp in DbContext.t2.Where(x => x.DimHierarchyItemKey == hi.Key).DefaultIfEmpty()
        where fp.fromDate >= FromDate || ???
两种可能性:

如果fp.OrderedDimDateKey在数据库中为空,则在实体中也应为空

在您的情况下,我猜如果fp.OrderedDimDateKey在数据库中不可为null,那么在查询中它为null的唯一方法是当没有匹配的t2实体时。这意味着测试可以按如下方式进行:

其中fp.OrderedDimDateKey>=FromDate | | fp==null
答案比我想象的要简单

int FromDate = 20190101;
var data = (from hi in DbContext.t1
        from fp in DbContext.t2
                .Where(x => x.DimHierarchyItemKey == hi.Key).DefaultIfEmpty()
                .Where(x => x.fromDate>= FromDate).DefaultIfEmpty()

您不能将您的实体更新为int吗?不幸的是没有。我无法控制db模式,并且C POCO是动态创建的,因此每次我所做的任何更改都必须进行后期重新生成。如果t2.fromDate是int,则在C中不可能为null,因此您可以始终假定它不是null。如果试图实例化空值,则会出现异常。谢谢,@GertArnold!我下一步就试试。我的方式很有效,但我从未想过你的方式。我稍后会测试它。谢谢你的建议。