2016-05-03 13 views
0

タイトルは私がしたいことのほとんどを示しています。私は2テーブル "オーダー"と "顧客"を持っています。注文テーブルには、注文を行ったすべての顧客の顧客IDが含まれており、顧客テーブルにはすべて顧客IDが含まれています。注文していない顧客を選択して表示する必要があります。私は顧客テーブルから得意先受注テーブルから得意先と一致しない行を表示する必要がテーブルからIDを選択してください。別のテーブルのIDと一致しません

を知っています。

私はこれを行う方法がわかりませんが、私は理解できる解決策を見つけていないので、どんな助けでも大歓迎です。これが私がやったことです。

private void btnQ9_Click(object sender, RoutedEventArgs e) 
{ 
    DataClasses1DataContext dc = new DataClasses1DataContext(); 
    var query = from c in dc.Customers 
       join o in dc.Orders on c.CustomerID equals o.CustomerID 
       group o by new { o.CustomerID, c.CompanyName } into grp 
       where(grp.Key.CustomerID.Count() ==0) 
       select new 
       { 
        CompanyName = grp.Key.CompanyName, 
        Order = grp.Key.CustomerID.Count() 
       }; 
    DataQ9.ItemsSource = query.ToList(); 
} 
+2

あなたを持っている場合、これはまた、あなたが... http://stackoverflow.com/questions/9171063/convert-sql-to-linq-left-join-with-null – JamieD77

+1

を希望しているクエリの同じタイプであります外部キーが適切に設定されている必要があります。dc.Customersでcを実行できるはずです。c.Orders.Count == 0はcを選択します。 – JamieD77

+0

最初のリンクが表示されませんでした。投稿していただきありがとうございます。それ以外は将来的には外に出る。これはlinqの割り当てであり、私たちは作業するデータベースを与えられ、linqで与えられた問題を解決することになっていました。うまくいけば2番目のコメントは誰か、多分私自身の将来に役立つでしょう – Kevin

答えて

3

あなただけで私は両方を試してみて、違いが偶数の場合(1が良好に動作するかを確認ですので

from c in dc.Customers 
where !dc.Orders 
     .Select(o => o.CustomerID) 
     .Contains(c.CustomerID) 

または

from c in dc.Customers 
where !dc.Orders 
     .Any(o => o.CustomerID == c.CustomerID) 

彼らは別のSQLを生成する可能性がありますしたいように思えます目立つ)。

+0

すばやい返事をありがとう、私はそれが私のために働くなら答えを受け入れます – Kevin