2

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

TB_AvailableProducts
-Prod_ID
-姓名
……
TB_Purchases
-Cust_ID
-Prod_ID

有没有办法通过使用 1 个 LINQ 查询来获取客户尚未购买的所有不同产品,或者我是否必须进行两个单独的查询,1 个用于所有产品,1 个用于购买的产品,然后比较两者?

4

1 回答 1

3

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

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;

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)
)
于 2012-12-02T21:14:14.907 回答