使用LINQ获取不加入的不同项

时间:2012-12-02 20:46:58

标签: linq

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

TB_AvailableProducts
-Prod_ID
-Name
....
TB_Purchases
-Cust_ID
-Prod_ID

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

1 个答案:

答案 0 :(得分: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)
)