2

2 つのテーブル間で LINQ クエリを実行すると、一致しない回答セットが返されます。

TB_AvailableProducts
-Prod_ID
-名前
....
TB_購入
-Cust_ID
-Prod_ID

1 つの LINQ クエリを使用して、顧客が購入していないすべての個別の製品を取得する方法はありますか? または、すべての製品に対して 1 つと購入した製品に対して 1 つの 2 つの個別のクエリを実行して、2 つを比較する必要がありますか?

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 に答える