2009-03-04 73 views
2

我在確定c#和LINQ如何解決處理不一定返回表結構而是結果集的數據結構的常見問題時遇到問題。如何在LINQ中爲結果集製作返回類型

我有一個可行的存儲過程,並在我的DBML

[Function(Name="dbo.p_GetObject")] 
public int p_GetObject([Parameter(Name="ObjectType", DbType="NVarChar(200)")] string objectType, [Parameter(Name="ItemState", DbType="Bit")] System.Nullable<bool> itemState, [Parameter(Name="IsPublished", DbType="Bit")] System.Nullable<bool> isPublished) 
{ 
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), objectType, itemState, isPublished); 
    return ((int)(result.ReturnValue)); 
} 

dbml的說,返回類型爲(無),這可能是癥結問題已經包括了。不過,我沒有與結果集匹配的DBML對象。

SP採用三個參數,並返回具有多行的三列(ID,名稱,值)的結果集。我可以創建這個數據對象,並調用它的ResultSet

當我寫一個函數調用對於這一點,我卡住:

public List<resultset> GetObject(string objectType, bool itemState, bool isPublished) 
{ 
    MyDataContext.p_GetObject(objectType, itemState, isPublished); 
} 

我的問題是:

我怎麼有數據上下文調用存儲過程填充我的resultSet對象?有更好的方法嗎?返回類型應該是什麼?一個SQL視圖?尋找好的建議...

回答

6

如果只是不理解你的SP,那可能是SET FMT_ONLY問題......嘗試從簡化版SP生成數據?

通常情況下,不與映射1:1與現有實體映射的SP/UDF將以生成的類型顯示自己。你可以在DBML文件中重命名(不在設計器中),但是我個人不會;我傾向於以紀念SP爲私有,和寫我自己的方式投射到我自己的POCO類型(庫定義):

var typed = from row in cxt.SomeFunction(123) 
      select new MyType {Id = row.Id, Name = row.Name, ...} 

這樣做的原因是部分用於倉庫純度,部分防範設計者習慣以意想不到的方式重寫DBML; -p請參閱here瞭解更多信息。

+0

要清楚的是,從應用程序調用SP並且工作正常,我只是不知道將其結果返回到POCO的最佳方法。我會研究你提到的生成類型。上述方法的任何具體提示將會有所幫助。謝謝馬克。 – 2009-03-04 03:07:26

相關問題