2

これが私のシナリオです(テーブル):

Orders
======================
Id (int)  
description (varchar)

Products
======================
Id (int)
description (varchar)

OrderProductXREF (cross reference table)
======================
ProductId (int)
OrderId (int)

私はあなたがアイデアを得ると思います。ここには何も異常はありません。

EDMX ファイルにインポートすると、OrderProductXREFテーブルはエンティティとして表示されません。表示されるのはナビゲーション プロパティだけです。エンティティOrderのProductsとエンティティProductのOrdersです。

だから、私の問題: 注文が関連付けられていないすべての製品をリストするLinqおよび/またはLambdaステートメントが必要です。または、注文されたことのないすべての製品をリストします。

SQL は次のようになります。

SELECT * FROM Products
WHERE Id NOT IN 
   (SELECT ProductId 
    FROM OrderProductXREF)

編集: ええと...申し訳ありませんが、私の質問の細部を1つ忘れていました。

新しい SQL は次のとおりです。

SELECT * FROM Products
WHERE Id NOT IN 
   (SELECT ProductId 
    FROM OrderProductXREF
    WHERE OrderID = 1)

つまり、ID = 1 の順序で注文されていないすべての製品

ありがとう

4

2 に答える 2

2
var q = from p in Context.Products
        where !p.Orders.Any()
        select p;

あなたの「ちょっとした詳細」について:

var q = from p in Context.Products
        where !p.Orders.Any(o => o.Id == 1)
        select p;
于 2012-03-20T16:56:55.503 に答える
2

謝罪 - 事前に質問を読み違えてください。私はあなたが欲しいと思う:

var query = db.Products.Where(product => !product.Orders.Any());

ただし、生成されたSQLを必ず確認する必要があります。私はそれが賢明であると期待していますが、そうでない場合は、おそらく他の選択肢を検討したいと思うでしょう.

編集:注文ID 1ではない製品を確認するには、おそらく次を使用できます。

var query = db.Products.Except(db.Orders
                                 .Where(order => order.Id == 1)
                                 .Single()
                                 .Products);

または:

var query = db.Products.Where(product => !product.Orders
                                                 .Where(order => order.Id == 1)
                                                 .Any());
于 2012-03-20T16:56:10.620 に答える