我正在尝试将以下 SQL 转换为 LINQ:
select * from ClientCommands as cc
join ClientCommandTypes as cct on cc.ClientCommandTypeID = cct.ClientCommandTypeID
right outer join ClientCommandSessionProcessed as ccsp
-- This next line is the one I'm having trouble with:
on cc.ClientCommandID = ccsp.ClientCommandID and cc.ClientSessionID = @ClientSessionID
where
ccsp.ClientCommandSessionProcessedID is null and
cc.StartDate < getdate() and
cc.DeactivatedDate > getdate() and
(cc.ClientAppID is null or cc.ClientAppID == @ClientAppID)
基本上它所做的是从数据库中从 ClientCommands 表中获取数据,除非 ClientCommandSessionProcessed 表中存在记录。我正在right outer
连接 ClientCommandSessionProcessed 表(在 中有两个条件on
)并检查该连接的结果是否为空 - 如果该表中有记录,则查询不应返回结果,因为这意味着它有由该会话 ID 处理。
我几乎在 LINQ 中完成了它,我唯一的问题是,我似乎不能在 my 中使用多个条件right outer join
,而且我认为如果我在where
子句中坚持我的第二个条件,这将无法正常工作。
到目前为止,这是我对 LINQ 的了解:
var clientCommands = from cc in db.ClientCommands
join cct in db.ClientCommandTypes on cc.ClientCommandTypeID equals cct.ClientCommandTypeID
join ccsp in db.ClientCommandSessionProcesseds
// How do I add a second condition here?
on cc.ClientCommandID equals ccsp.ClientCommandID into ccspR
from ccspRR in ccspR.DefaultIfEmpty()
where
ccspRR == null &&
cc.StartDate < DateTime.Now &&
cc.DeactivatedDate > DateTime.Now &&
(cc.ClientAppID == null || cc.ClientAppID == clientApp.ClientAppId)
select new { cc, cct };
有谁知道是否可以在联接中添加第二个条件?如果没有,是否有解决此类问题的方法?
谢谢!