我是LINQ的新手。我正在尝试转换现有的MySQL查询。我有一个事件表和一个构建" session"记录。
事件表包含许多varchar
列,且至少有一列datetime
列。
会话表有一个startId
字段,该字段是返回事件表主键的链接,指定启动会话的事件。有endId
字段可以是NULL
(会话处于活动状态),也可以是指向结束会话的记录的事件表的指针。
我想搜索某个日期有效的会话。在MySQL中我可以说:
select
*
from
Sessions s
inner join EventLogs eStart on s.StartId equals eStart.Id
inner join EventLogs eEnd on s.EndId equals eEnd.Id
where
'<some date string>' betwen eStart.Date and ifnull(eEnd.Date, now())
我还没有看到LINQ有一个between
运算符,所以我做了下一个最好的事情。让我这一刻的是,我不知道如何在LINQ中表达ifnull(eEnd.Date, now())
。我正在尝试:
var result =
from s in dbContext.Sessions
join eStart in dbContext.EventLogs on s.StartId equals eStart.Id
join eEnd in dbContext.EventLogs on s.EndId equals eEnd.Id
where ('<some date string>' >= eStart.Date)
&& ('<some date string>' <= (eEnd.Date ?? DateTime.Today))
但我被告知??
运算符不能应用于DateTime类型的操作数。这里的魔力是什么?