Linq嵌套内部联接
我想加入以下表格Linq嵌套内部联接,linq,linq-to-sql,nested-queries,linq-query-syntax,nested-query,Linq,Linq To Sql,Nested Queries,Linq Query Syntax,Nested Query,我想加入以下表格 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)
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和B_BookInstance连接起来,然后将它们的结果与BookCategory连接起来。
(第一次加入)[B_投标等于B_投标]
(第二个嵌套联接)[第一个联接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
我假设了内部联接(您的FKs不是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("");
}
与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
};
如果导航属性已就位,则无需显式使用linq的join语句即可执行此操作:
from b in ctx.B_Book
from bi in b.BookInstances
select new { b.Property1, bi.Property2, b.BookCategory.Name }