Linq,左连接和日期

Linq,左连接和日期,linq,linq-to-sql,date,left-join,defaultifempty,Linq,Linq To Sql,Date,Left Join,Defaultifempty,所以我的情况是,我有一个linq到sql模型,它不允许我的一个表中的日期为空。这是有意的,因为数据库不允许该字段为空。我的问题是,当我尝试用这个模型编写Linq查询时,我无法再与该表进行左连接,因为日期不是一个“可空”字段,因此我无法将其与“无”进行比较 例如: 有一个电影表{ID,MovieTitle},和一个放映表{ID,MovieID,ShowingTime,Location} 现在我正试图写一份声明,将所有没有上映的电影都退回。在T.SQL中,这看起来像: Select m.* From

所以我的情况是,我有一个linq到sql模型,它不允许我的一个表中的日期为空。这是有意的,因为数据库不允许该字段为空。我的问题是,当我尝试用这个模型编写Linq查询时,我无法再与该表进行左连接,因为日期不是一个“可空”字段,因此我无法将其与“无”进行比较

例如: 有一个电影表{ID,MovieTitle},和一个放映表{ID,MovieID,ShowingTime,Location}

现在我正试图写一份声明,将所有没有上映的电影都退回。在T.SQL中,这看起来像:

Select m.*
From Movies m Left Join Showings s On m.ID = s.MovieID
Where s.ShowingTime is Null
现在在这种情况下,我可以在“Location”字段上测试Null,但这不是我实际拥有的(只是一个简化的示例)。我所有的都是非空日期

我试着用Linq写:

From m In dbContext.Movies _
Group Join s In Showings on m.ID Equals s.MovieID into MovieShowings = Group _
From ms In MovieShowings.DefaultIfEmpty _
Where ms.ShowingTime is Nothing _
Select ms
然而,我得到了一个错误的说法

“Is”运算符不接受“Date”类型的操作数。操作数必须是引用类型或可为空的类型

这有什么办法吗?模型是正确的,Showings:ShowTime表中不应该有空值。但是如果你做了一个左键连接,并且没有特定电影的放映时间,那么该电影的放映时间应该是零


谢谢大家的帮助。

使用左连接并不能真正帮助您。因为在右边的表中永远不会有任何结果,所以您最好只检索左边的表,而只检索左边的表。这是一个简单的“不在”/“不存在”查询:


如果Showings表中没有记录,则查询中的整个对象应为空。在这种情况下,这个日期永远不会生效。左连接将这样编写,只选择缺少放映的电影

Dim query = From m In dbContext.Movies _
            Group Join s In dbContext.Showing On m.ID Equals s.MovieID Into g = Group _
            From item In g.DefaultIfEmpty() _
            Where item Is Nothing _
            Select m

你试过用==代替is吗?is运算符不比较引用类型吗?
Dim query = From m In dbContext.Movies _
            Group Join s In dbContext.Showing On m.ID Equals s.MovieID Into g = Group _
            From item In g.DefaultIfEmpty() _
            Where item Is Nothing _
            Select m