C# 从与另一个表中的ID不匹配的表中选择ID

C# 从与另一个表中的ID不匹配的表中选择ID,c#,sql-server,linq,C#,Sql Server,Linq,标题说明了我想做的大部分事情。我有两张桌子,分别是“订单”和“客户”。orders表包含下订单的每个客户的customerID,customers表包含每个customerID。我需要选择并显示尚未下订单的客户。我知道 我需要显示customers表中的customerID与orders表中的customerID不匹配的行。 我不知道如何做到这一点,但还没有遇到一个解决方案,我可以理解,所以任何帮助将不胜感激。这就是我尝试过的 private void btnQ9_Click(object se

标题说明了我想做的大部分事情。我有两张桌子,分别是“订单”和“客户”。orders表包含下订单的每个客户的customerID,customers表包含每个customerID。我需要选择并显示尚未下订单的客户。我知道

我需要显示customers表中的customerID与orders表中的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();
}

看起来你只是想

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


它们可能会生成不同的SQL,因此我会尝试这两种方法,看看哪一种执行得更好(如果差异很明显的话)。

看起来您只是想

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


它们可能会生成不同的SQL,因此我会尝试两者,看看哪一种性能更好(如果差异很明显)。

感谢您的快速回复,我会接受答案如果它适用于我的话。谢谢您的快速回复,我会接受答案如果它适用于我的话。这是您想要的相同类型的查询。。另外,如果您的外键设置正确,您应该能够在dc中从c执行
。客户c.Orders.Count==0选择c
我没有看到第一个链接,谢谢您发布它,所以它将在将来帮助其他人。这是一项linq任务,我们得到了要使用的数据库,并通过linq解决了问题。希望第二条评论能对某人有所帮助,也许我自己将来也会有帮助。这和你想要的是同一种类型的查询。。另外,如果您的外键设置正确,您应该能够在dc中从c执行
。客户c.Orders.Count==0选择c
我没有看到第一个链接,谢谢您发布它,所以它将在将来帮助其他人。这是一项linq任务,我们得到了要使用的数据库,并通过linq解决了问题。希望第二条评论能对某些人有所帮助,也许是我自己