2010-07-07 88 views
1

在最簡潔的方式下獲取返回值和結果集(不將參考參數傳遞給存儲過程)尋求建議。是否有可能使用LINQ從存儲過程返回返回值和結果集

我存儲過程有返回值來顯示錯誤等,他們結束與選擇語句來獲取信息。使用常規命令,我會創建一個輸出參數來保存返回值。我無法更改存儲過程中的分貝,所以我不能通過一個不同的輸出參數,除了返回值。

想法??

回答

3

當您通過從服務器瀏覽器中將其拖動到LINQ to SQL數據上下文設計器中創建存儲過程時,設計人員將分析存儲過程以確定它是否返回結果集。除非它具有大量的動態SQL,否則通常會出現。

如果是這樣,該方法生成的回報ISingleResult<T>其中T是從您的存儲過程的分析產生的一類,以適應在結果集的形狀,或者一個你在存儲過程的屬性頁中指定。因爲ISingleResult來自IEnumerable,所以大多數人對結果做了簡單的foreach以獲得結果集。但大多數人忘記的是ISingleResult派生自IFunctionResult,其中有一個屬性ReturnValue這是sproc的返回值。

因此,所有你需要做的是沿着線的東西:

using(var dc = new MyDataContext()) 
{ 
    var results = dc.MyStoredProcedure(); 
    var returnValue = (int)results.ReturnValue; // note that ReturnValue is of type object and must be cast. 
    foreach(var row in results) 
    { 
     // process row 
    } 
} 
+0

我相信這是我以前做什麼,但問題是,這些存儲的特效,現在返回的自定義類型,因此它不」 t自動創建自定義類型中的返回值。我會看看是否可以使用泛型var類型,然後通過代碼轉換爲自定義類型。 – Adam 2010-07-07 19:27:17

+0

@Adam:當你說「返回自定義類型」時,你的意思是返回值還是結果集? – Randolpho 2010-07-07 19:59:30

+0

我的意思是結果集...我只是看着舊的條目,所以這不再是一個問題。我想我剛結束使用var類型的結果集,因爲我不能讓它使用自定義返回類型的結果,並仍然有一個「返回值」作爲該返回類型的一部分。 – Adam 2011-01-14 00:30:39