2016-09-07 10 views
0

次のLINQクエリでは、注文していないが注文が$ 100以上の顧客を含む顧客をAllと表示する必要があります。しかし、私の次のLINQクエリは注文価格に関係なくすべての顧客を返す。以下のLINQクエリで私のWhere(ord => ord.price > 100)句を無視しているようです。私は何が間違っているかもしれませんか?LINQ to SQL - 残りの2つの結合が結合されていない状態で結合する

モデル

public class Customer 
{ 
    public int CustomerId { get; set; } 
    public string CustName{ get; set; } 
} 

public class Order 
{ 
    public int OrderId { get; set; } 
    public int CustomerId { get; set; } 
    public float price { get; set; } 
} 

LINQクエリ

var Query1 = from c in Customers 
      join ord in Orders on c.CustomerId equals ord.CustomerId into cord into cord 
      from t in cord.Where(ord => ord.price > 100).DefaultIfEmpty() 
      select new {CustName= c.Name, OrderID = (t == null ? 0 : t.OrderId)}; 

SQLクエリ

私はLINQクエリにT-SQLクエリを次翻訳したい:

+0

は次のようにクエリを変更してみ?または100以上の注文をした顧客のリストを返すのですか? –

+0

@WillRayありがとうございました。あなたの質問に答えるために私のポストに 'UPDATE 2'セクションを追加しました。 – nam

答えて

0

これを確認できるデータはありませんが、2つのコレクションを結合するフィールド(CustomerId)は指定していません。だから、あなたが唯一の100を超えていたためで占め `OrderId`で、すべての顧客のリストを返したい(on c.CustomerId equals ord.CustomerIdを追加)

var Query1 = from c in Customers 
      join ord in Orders on c.CustomerId equals ord.CustomerId into cord 
       from t in cord.DefaultIfEmpty() 
      where t.price > 100 
      select new {CustName = c.Name, OrderID = (t == null ? 0 : t.OrderId)}; 
+0

タイプミスを指摘していただきありがとうございます。私はそれを修正しましたが、注文の価格に関係なくすべての顧客を表示しました。 – nam

+0

@nam興味深いことに、私は同じ結果が期待できません。私はクエリにわずかな変更を加え、 'where'句をそれ自身の行に置きました。それでも同じ結果ですか? –

+0

@ GrantWinneyはい、クエリの出力は驚きにも私を連れて行きました。 – nam

関連する問題