2012-03-13 67 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