0

我想參加下表LINQ的嵌套的內部聯接

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] (第二嵌套加入)[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 

回答

0

我假設內部聯接(你的FKs不爲空),所以我想這樣的查詢:

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(""); 
    } 
1

什麼匹配你在LINQ中的查詢將是以下(你會注意到與SQL的相似性)。我還包含有關如何重命名字段一些例子返回,如價格或類別名稱:

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 
     }; 
0

你可以做到這一點沒有明確使用LINQ的連接語句,前提是導航性能很到位:

from b in ctx.B_Book 
from bi in b.BookInstances 
select new { b.Property1, bi.Property2, b.BookCategory.Name }