.net 将SQL左连接转换为Linq

.net 将SQL左连接转换为Linq,.net,sql,linq,.net,Sql,Linq,将此SQL语句转换为LINQ时遇到一些困难: Declare @ind date, @outd date set @ind = '2012-03-17' set @outd = '2012-03-18' SELECT k.id FROM Kennels k LEFT JOIN (SELECT * FROM Reservations WHERE (DateIn >= @ind and DateIn < @outd) or (Dat

将此SQL语句转换为LINQ时遇到一些困难:

Declare @ind date, @outd date
set @ind = '2012-03-17'
set @outd = '2012-03-18'

SELECT k.id
FROM Kennels k
LEFT JOIN (SELECT * 
            FROM Reservations 
            WHERE (DateIn >= @ind and DateIn < @outd) or  (DateOut > @ind and DateOut <= @outd)) r ON k.id = r.Kennel_ID
WHERE r.kennel_id is null
林克:

我的Linq语句的问题是,当r为nothing时,查询的Where r.Kennel.ID部分将失效

如果能帮我重写这个问题,我将不胜感激

谢谢

Tom

您可以将r.Kennel.ID为零的位置更改为r为零的位置

但我会用c写

var available =
    from k in db.Kennels
    where !k.Reservations.Any(r => r.DateIn >= Date_From && r.DateIn < Date_To) || (r.DateOut > Date_From && r.DateOut <= Date_To)
    select k;
因为我觉得它更容易阅读。
很抱歉,我的VB有点生疏,但我认为你可以很容易地翻译它| | is Or,&&is And!不是

请查看此链接:谢谢您的帮助!我将此查询与现有查询结合使用,并使其正常工作。基本上是r什么都不是得到它的。
var available =
    from k in db.Kennels
    where !k.Reservations.Any(r => r.DateIn >= Date_From && r.DateIn < Date_To) || (r.DateOut > Date_From && r.DateOut <= Date_To)
    select k;