2012-03-13 88 views
2

我現在有2代表我的數據庫中,如下所示:物料清單查詢

Table: SampleProducts 
SampleProductsId (PK) Name 
1        A 
2        B 
3        C 
4        D 
5        E 
6        F 
7        G 

Table: SampleProductsBoms   
SampleProductsBomId (PK) ParentId (FK) ChildId (FK) Quantity 
1        1    2    3 
2        2    3    4 
3        4    6    2 

的ParentId和childID的兩個參考SampleProductsId

在英語,所以我可以保證,我們都在同一頁上:由 產品A向上的B的3 產品B是由4的ç 產品d高達F的

的2

由我想創建存儲過程/ LinQ中陳述或somethi NG,我可以在我的MVC 3 C#的Web應用程序使用,這將給我下面的表結構/對象使用...

例子:

Recursive Query to find the components of B 
ProductId Name Quantity 
    3  C  4 
    6  F  2 

這可以去頗深,所以我真的需要遞歸!

+0

你試過CTE – 2012-03-13 05:00:06

+0

沒有我還沒有。我來自PHP背景。我可以比較容易地在PHP/mySQL中執行此操作。這是微軟技術,我不習慣...... SQL服務器語法,LinQ語法,C#語法和現在的CTE語法,學習Visual Studio的做事方式......是否創建一個viewModel來放置查詢,或者它是否會只是爲了創建一個存儲過程而變得更好/更快......我現在頭痛不已......如果你能提供一個簡單的存儲過程或者將會拉出那個表的東西,那將是非常值得讚賞的。謝謝 – Gravy 2012-03-13 05:03:32

+0

請不要將「 - Sql Server 2008 VS2010 MVC 3 C#」等內容添加到您的標題中。這就是標籤的用途。 – 2012-03-13 05:51:59

回答

0

CTE是有益的遞歸如需要您的問題聲明檢查鏈接

Common Table Expression

或我想下面的查詢也可以解決你的目的

select components.SampleProductId as productid,components.Name as Name,Quantity 
from SampleProductsBOM bom 
inner join SampleProducts products 
on products.ParentId=bom.ParentId 
inner join SampleProducts components 
on components.SampleProductId=bom.ChildId 
where products.Name='B' 
+0

謝謝,但在你的鏈接中,他們的例子包含連接。這使得理解發生的事情非常混亂......我比我開始時更加迷失方向。 – Gravy 2012-03-13 05:16:50

+0

什麼是混淆,你可以在linq中執行你的查詢,也可以使用EF創建過程和映射。你必須選擇你想要執行這個任務的地方,如果你的嵌套很深,我認爲你應該更喜歡程序而不是linq。它會提供靈活性。 – 2012-03-13 05:19:07

+0

謝謝,會給你一個嘗試,讓你知道它是怎麼回事。 – Gravy 2012-03-13 05:37:33