2016-05-24 9 views
1

linqで左結合を選択すると、一度に50を超えて注文されたことのないすべての製品が見つかりました。私は何が間違っているのか分かりません。 これは私がやったことですが、正しい答えが得られません。一度にを注文することはない50以上あった製品を見つけたいlinqと条件で左結合を選択

var q5 = from p in db.Products 
       join o in db.Orders on p.ProductID equals o.OrderID 
       join od in db.Order_Details on o.OrderID equals od.OrderID 
       where od.Quantity < 50 
       select p.ProductID; 
     foreach (var p in q5) 
     { 
      Console.WriteLine(p); 
     } 

答えて

0

は、これは私のコードです。したがって、注文への参加はあまり役に立たない。このクエリはEnumerable.Anyを使用している

var productsWithLowOrders = db.Products 
    .Where(p => !db.Orders 
     .Any(o => p.ProductID == o.OrderID && db.Order_Details 
      .Any(od => o.OrderID == od.OrderID && od.Quantity >= 50))); 

、SQLでそれは+ EXISTSNOT EXISTSを使用して、関連するテーブルにサブクエリに変換されます:あなたは、このアプローチを使用することができます。

+0

何かがあなたのquerieで作業されていない – coco

+0

構文が正しくありません。 – coco

+0

@coco:問題は表示されません。正確なメッセージは何ですか? –

0

だから、これは私が見つけた最高のソリューションです:

var q5 = from p in db.Products 
       from od in db.Order_Details 
       .Where (od => od.ProductID == p.ProductID) 
       .Where (od=> od.Quantity > 50).DefaultIfEmpty() 
       select (od.OrderID !=null ? "-" : p.ProductName) 
       ; 
     foreach (var p in q5) 
     { 
      if(p != "-") 
      { 
       Console.WriteLine(p); 
      } 
     } 
関連する問題