1

このタイプの設定のデータ テーブルがあります。

表 A

AID     AName
---------------------
1       A_Name1
2       A_Name2
3       A_Name3

表 B

BID     BName
---------------------
10      B_Name1
20      B_Name2
30      B_Name3

表 C

AID     BID
---------------------
1       10
2       10
2       20
2       30
3       20
3       30

LINQ を使用して、A の特定の ID に対して、テーブル C にない B のリストを取得するクエリを作成したいと考えています。

したがって、AID が 1 の場合、BID は 20 と 30 が必要です。

AID 3 の場合、BID 10 が必要です

AID が 2 の場合、何も返されませんでした。

私はSQLが

SELECT
    B.BID
FROM B
LEFT OUTER JOIN C ON C.BID = B.BID AND A.AID = 1 
-- AID would change based on which I was looking for, 1, 2, or 3

LINQ に相当するものは何ですか?

それに応じて、A、B、および C のテーブルに一致するオブジェクトがあると仮定してください。

4

1 に答える 1

6

LinqToSql の場合、データベース オプティマイザーはこれを適切に処理します。「Not Any」パターンを使用します。

IQueryable<B> query =
  db.BTable
    .Where(b => !db.CTable
      .Where(c=> c.AID == 1)
      .Any(c => c.BID == b.BID)
    )

LinqToObjects の場合、BList の各項目の CList を列挙したくありません。その列挙を 1 回行います。

List<int> BIDList = CList
  .Where(c => c.AID == 1)
  .Select(c => c.BID)
  .ToList();
IEnumerable<B> query = BList
  .Where(b => !BIDList.Contains(b.BID));
于 2008-10-07T17:57:59.803 に答える