使用LINQ获取未联接的不同项

使用LINQ获取未联接的不同项,linq,Linq,我在两个表之间运行LINQ查询并返回不匹配的答案集时遇到问题 TB_AvailableProducts -Prod_ID -Name .... TB_Purchases -Cust_ID -Prod_ID TB_可用产品 -产品标识 -名字 .... TB_采购 -客户ID -产品标识 是否有一种方法可以通过使用1个LINQ查询获得客户未购买的所有不同产品,或者我必须执行两个单独的查询,1个用于所有产品,1个用于购买的产品,并比较这两个查询 此查询将返回采购表中没有相关记录的所有产品 int c

我在两个表之间运行LINQ查询并返回不匹配的答案集时遇到问题

TB_AvailableProducts -Prod_ID -Name .... TB_Purchases -Cust_ID -Prod_ID TB_可用产品 -产品标识 -名字 .... TB_采购 -客户ID -产品标识
是否有一种方法可以通过使用1个LINQ查询获得客户未购买的所有不同产品,或者我必须执行两个单独的查询,1个用于所有产品,1个用于购买的产品,并比较这两个查询

此查询将返回采购表中没有相关记录的所有产品

int customerID = 1;
var query = from ap in context.TB_AvailableProducts
            join p in context.TB_Purchases.Where(x => x.Cust_ID == customerID) 
                 on ap.Prod_ID equals p.Prod_ID into g
            where !g.Any()
            select ap;
如果products表中没有重复的记录,我认为您不需要在此处使用
Distinct

生成的SQL查询如下所示:

SELECT ap.Prod_ID, ap.Name
FROM TB_AvailableProducts AS ap
WHERE NOT EXISTS (SELECT 
    1 AS C1
    FROM TB_Purchases AS p
    WHERE (1 = p.Cust_ID) AND (ap.Prod_ID = p.Prod_ID)
)

@Jani谢谢,但看起来这是在选择一组与我相信的另一个表相对应的内容。我试图返回与特定客户没有关系的产品列表。是的,我知道,但它可以引导您找到@lazyberezovskytanks所述的解决方案,以帮助@lazyberezovsky,但当我尝试时,它不起作用。当这里应该有一个相当大的列表时,它不返回任何内容。此查询返回所有产品,这些产品在采购表中没有记录。也许我不明白你想要实现什么。你能澄清一下你的期望吗?我想得到一份特定客户从未购买过的产品清单。非常感谢@lazyberezovsky!!