Linq to SQL Left Join with where 子句查找条件或 null

Linq to SQL Left Join with where clause looking for condition or null

我需要 select 来自 2 个表的记录,左连接。那部分很好。但是,在 where 子句中,我需要 select where t2.fromDate > 20190101 OR t2.fromDate is null.

问题是在 c# 中,t2.fromDate 是一个 int,而不是一个可为 null 的 int。我应该如何将 t2.fromDate 与 null 进行比较?我试过 t2.fromDate == 0,但这不起作用,因为在 SQL 中该值为 null,但在 C# 中期望该值为 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 || ???

两种可能性:

  1. 如果 fp.OrderedDimDateKey 在数据库中可以为空,那么它在实体中也应该可以为空。

  2. (我猜是你的情况)如果 fp.OrderedDimDateKey 在数据库中不可为空,那么在查询中它为空的唯一方法是没有匹配的 t2 实体。这意味着测试可以像

    一样进行
    where 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()