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 || ???
两种可能性:
如果 fp.OrderedDimDateKey
在数据库中可以为空,那么它在实体中也应该可以为空。
(我猜是你的情况)如果 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()
我需要 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 || ???
两种可能性:
如果
fp.OrderedDimDateKey
在数据库中可以为空,那么它在实体中也应该可以为空。(我猜是你的情况)如果
一样进行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()