2016-05-03 121 views
0

標題說明了我希望做的大部分操作。我有兩張表訂單」和「客戶」。訂單表包含已下訂單的每個客戶的客戶ID,並且客戶表包含每個客戶ID。我需要選擇並顯示未下訂單的客戶。我知道從表中選擇ID與其他表中的ID不匹配

我需要顯示的行,其中的customerID客戶表不會訂單表匹配的customerID

我不知道如何做到這一點,但沒有遇到一個解決方案,我可以理解,所以任何幫助將不勝感激。這是我嘗試過的。

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

如果你有你的外鍵設置正確,你應該能夠做'從C在dc.Customers其中c.Orders.Count == 0選擇c' – JamieD77

+0

我沒有看到第一個鏈接,感謝張貼它,UpVote所以它會幫助某人否則在未來。這是一個linq任務,我們給了數據庫來處理和解決通過linq給出的問題。希望第二個評論會幫助某人,也許我自己在將來 – Kevin

回答

3

好像你只是想

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

相關問題