0

次のテーブルに参加したい

1. B_Book[1st Table]
      -B_BID (Book ID)(PK)
      -B_Name
      -B_CategroyID (FK)
2. BI_BookInstance [2nd Table]
      -BI_IID(Instance ID)
      -BI_BID (FK)
      -BI_Price
3. BC_BookCategory [3rd Table]
      -BC_CategoryID (PK)
      -BC_CategoryName

最初に B_Book と BI_BookInstance を結合し、次に両方の結果を BookCategory で結合します。(1 番目の結合)[B_BID は BI_BID と等しい] (2 番目のネストされた結合)[1 番目の結合の結果 B_CategoryID は BC_CategoryID と等しい]

編集

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

SELECT * FROM
   (SELECT * FROM B_Book b JOIN BI_BookInstance bi on b.B_BID = bi.BI_BID) as t1
   JOIN BC_BookCategoryID bc on bc.BC_CategoryID = t1.B_CategoryID
4

3 に答える 3

1

LINQ でのクエリに一致するものは次のようになります (SQL との類似性に気付くでしょう)。Price や CategoryName など、返されるフィールドの名前を変更する方法の例もいくつか含めました。

var results = from b in B_Book
    join bi in BI_BookInstance
    on b.B_BID equals bi.BI_BID
    join bc in BC_BookCategory
    on b.B_CategoryID equals bc.BC_CategoryID
    select new
      {
        // put in whatever fields you want returned here:
    b.B_BID, 
    b.B_CategoryID, 
    b.B_Name,
    bi.BI_BID,
    bi.BI_IID,
    Price = bi.BI_Price,
    bc.BC_CategoryID,
    CategoryName = bc.BC_CategoryName
      };
于 2012-07-08T18:53:37.630 に答える
0

ナビゲーション プロパティが設定されていれば、linq の join ステートメントを明示的に使用せずにこれを行うことができます。

from b in ctx.B_Book
from bi in b.BookInstances
select new { b.Property1, bi.Property2, b.BookCategory.Name }
于 2012-07-10T10:19:52.737 に答える
0

内部結合 (FK が null ではない) を想定しているので、次のようなクエリが必要です。

    var ctx = new YourEntities();

    var query = from b in ctx.B_Book
                from bi in ctx.BI_BookInstance
                from bc in ctx.BC_BookCategory
                where b.B_BID == bi.BI_BID && b.B_CategoryID == bc.BC_CategoryID
                select new 
                {
                    BInstID = bi.BI_IID,
                    BName = b.B_Name,
                    BPrice = bi.BI_Price,
                    BCategory = bc.BC_CategoryName
                };

    foreach (var item in query)
    {
        Console.WriteLine(item.BInstID);
        Console.WriteLine(item.BName);
        Console.WriteLine(item.BPrice);
        Console.WriteLine(item.BCategory);
        Console.WriteLine("");
    } 
于 2012-07-07T17:53:01.867 に答える