我在两个表之间运行LINQ查询时遇到问题,并返回一个不匹配的答案集。
TB_AvailableProducts -Prod_ID -Name .... TB_Purchases -Cust_ID -Prod_ID
有没有办法通过使用1个LINQ查询获取客户尚未购买的所有不同产品,或者我必须做两个单独的查询,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)
)