Linq Sql Int null等于null。没有返回行

时间:2017-12-05 03:32:35

标签: c# sql linq

我有一个带有where子句的linq查询,如下所示

var ExistingGroupDataSource = (from ppatg in dbContext.XXXXXXXXX
                               join pd1 in dbContext.XXXXXXXXXXX on ppatg.ScheduleID equals pd1.ScheduleID 
                               where  pd1.GroupID == null
                               select
                               new 
                               {
                                FinishPDI = pd1.ProductionDateID,
                                FinishingDate = pd1.WorkFlowDate,
                                ppatg.GroupName,
                                ppatg.PNTGroupID
                               });

在数据库中,GroupID是一个可以为null的int。 linq查询返回没有筛选的where子句的行,但是当我包含where子句时返回none。数据库中的GroupId列中有空值。

这绝对不会产生任何结果。所有关于该主题的文献都说这相当于

pd1.GroupID is null // in sql

我得到的结果与此相矛盾

Sql代码是

 select pd1.ProductionDateID as FinishPDI, pd1.WorkflowDate as FinishingDate,GroupName ,PNTGroupId 
 from XXXXXXXXXXXX 
 inner join XXXXXXXXXXXX pd1 on 
 XXXXXXXXXXXX.ScheduleId = pd1.ScheduleID
 where pd1.GroupID is null 

1 个答案:

答案 0 :(得分:1)

您可以将wherejoin结合使用,这样可以获得预期效果:

var ExistingGroupDataSource = (from ppatg in dbContext.XXXXXXXXX
                               join pd1 in dbContext.XXXXXXXXXXX.Where(p => !p.GroupId.HasValue) on ppatg.ScheduleID equals pd1.ScheduleID 
                               select
                               new 
                               {
                                FinishPDI = pd1.ProductionDateID,
                                FinishingDate = pd1.WorkFlowDate,
                                ppatg.GroupName,
                                ppatg.PNTGroupID
                               });