使用LINQ和存储过程获得一对多关系

时间:2011-11-17 10:29:09

标签: .net sql linq

我有两张桌子:

tbl_Orders
id       OrderN        DateAdd
1        77-65        01.01.2011
2        77-73        24.01.2011
3        77-82        13.01.2011
4        77-86        15.01.2011
5        77-89        11.01.2011


tbl_OrdersList
id       OrderId        ItemId
1        1              23
2        1              32
3        3              33
4        5              45 
5        5              48

tbl_Orders中有订单并在tbl_OrdersList中以此订单购买。 所以,系统中有5个订单:

  1. Order1(id = 1)= 2次购买(itemsId = 23,32)
  2. Order2(id = 2) - 空
  3. Order3(id = 3)= 1次购买(itemsId = 33)
  4. Order4(id = 4) - 空
  5. 订单5(id = 5)= 2次购买(itemsId = 45,48)
  6. 所以,我使用LINQ2Sql,我希望执行存储过程,而不是由LINQ sql代码生成

    如何编写此存储过程更好?是否有一些usp(首先是Orders,第二个是OrdersList)?

    在执行usp之后建立关系会有什么好处(例如,使用生成的类和LINQ生成的代码,我可以做这样的事情:

    // Orders - get orders from tbl using dataContext and tbl_Orders
    foreach(var order in Orders){
        foreach(var orderlist in order.OrdersList) {
    
        }
    }
    

2 个答案:

答案 0 :(得分:0)

Linq2Sql是Linq最薄弱的环节。它生成的SQL对于简单的情况来说是不错的,但是当你向代码添加最后的触摸时经常会退化。退化可能是1000倍或更糟。这是一个蜜蜂陷阱:当你的截止日期临近时,它开始很好,然后变成一团糟。

我养成了编写存储过程的习惯。

答案 1 :(得分:-1)

 Dim q = From o In Orders, ol In OrdersList _
           where o.id Equals ol.OrderId Into ords = Group _
            From ol In ords.DefaultIfEmpty _
            Select New With {o.OrderN, o.DateAdd,ords.ItemID}