2012-03-08 3 views
0

に参加変換:は、私はいくつかの困難LINQに、このSQL文の変換を抱えている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は何もないとき

Dim available = From k In Kennels _ 
        Group Join r In db.Reservations.Where(Function(fx) (fx.DateIn >= Date_From And fx.DateIn < Date_To) Or (fx.DateOut > Date_From And fx.DateOut <= Date_To)) On k Equals r.Kennel Into Group _ 
        From r In Group.DefaultIfEmpty 
        Where r.Kennel.ID Is Nothing 
        Select k 

私のLINQ文を使用して、問題があり、クエリーの「r.Kennel.ID」部分が転倒します。

このクエリの書き換えに感謝します。

おかげで、

トム

+0

チェックアウトこのリンク:http://stackoverflow.com/questions/ 525194/linq-inner-join-vs-left-join – diaho

答えて

1

あなたはWhere r.Kennel.ID Is Nothing

Where r Is Nothingにを変えることができる。しかし、私はそれが簡単に読むことを見つけるように、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のため申し訳ありません
ビットが錆びbeeingて、私はあなたが簡単にそれを翻訳することができると思う(&&、さ||OrAnd!あるNot

+0

あなたの助けてくれてありがとう! これと私の既存のクエリを組み合わせて使用​​しました。本質的にrはそれを得たものではありませんでした。 – Tom

関連する問題