2011-11-17 69 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