2011-11-17 78 views
0

一个一对多的关系,我有2个表:获得使用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_OrdersList tbl_Orders和采购订单。 因此,有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. Order5(ID = 5)= 2购买(itemsId = 45,48)

所以,我使用LINQ2Sql和那里我想执行存储过程,而不是由LINQ sql代码生成。

写这个存储过程怎么样更好?有几个usp(订单第一,OrdersList第二)?

它是如何更好地使关系后,我执行我的USP(例如,使用生成的类和LINQ生成的代码,我可以做这样的事情:

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

    } 
} 
+0

我的问题的答案是在属性窗口中属性'返回类型',当我们已经将usp拖到dbml方法并单击它时。默认情况下,有自动生成的类型,但我可以将其更改为“订购”类型。 – FSou1

回答

0

LINQ2SQL是Linq的最薄弱的环节。它所产生的SQL对于简单的案例来说是体面的,但是当你向代码添加最后的接触时,它往往会退化,退化可能是1000倍或者更糟,这是一个甜蜜的陷阱:它开始变得很棒,然后当你的最后期限画出嘶嘶声

我会养成令状存储过程。

+0

所以。有关于我的问题吗?我知道usp通常更好,但我如何将结果映射到Orders和Orders.OrdersList等对象中? – FSou1

+0

将DBML文件添加到您的项目中。将存储过程从服务器资源管理器拖到DBML文件。这将生成带有C#函数的DataContext,该函数将您的存储过程映射到对象。 – Andomar

+0

它将使用AutoGenerated类型进行映射。我已经找到了一种映射我需要的返回类型的方法。 – FSou1

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

这是什么?你读过主题了吗? – FSou1