2017-02-22 19 views
1

我正在使用Dapper調用存儲過程。我想使用using語句之外的返回記錄,但我不確定如何聲明變量returnedData,因爲它是動態的並取決於存儲過程的結果。我只進行一次這樣的調用,所以對於我來說,創建一個模型來表示存儲過程返回的集合是沒有意義的,因此我想使用它。在使用Dapper語句之前聲明動態結果

using (IDbConnection db = new SqlConnection(SqlDataAccess.LoadConnectionString("TestData"))) 
{ 
    var returnedData = db.Query<dynamic>("StoredProcedureName", 
           new 
           { 
            ClientId = myClientId, 
            CompanyId = myCompanyId 
           }, 
           commandType: CommandType.StoredProcedure).SingleOrDefault(); 
} 

如何在聲明變量returnedDatausing聲明所以編譯器會很高興過嗎?

+0

什麼阻止你聲明使用之外您的變量? – Sharky

+0

我不知道我可以聲明'returnedData'爲'dynamic'。我沒有多少使用'dynamic'變量。 – webworm

回答

1

Query<T>回報IEnumerable<T>,並SingleOrDefault產生從它T,所以returnedData可以聲明爲dynamic

dynamic returnedData = null; 
using (IDbConnection db = new SqlConnection(SqlDataAccess.LoadConnectionString("TestData"))) 
{ 
    returnedData = db.Query<dynamic>(
     "StoredProcedureName" 
    , new { 
      ClientId = myClientId 
     , CompanyId = myCompanyId 
     } 
    , commandType: CommandType.StoredProcedure 
    ).SingleOrDefault(); 
} 
Console.WriteLine(
    "ClientId={0}, CompanyId={1}" 
, returnedData?.ClientId 
, returnedData?.CompanyId 
); 
+0

謝謝!簡單而直截了當。我假設通過使用'?'我能夠得到一個值,如果'returnedData'不是'null',但不拋出異常,如果它是? – webworm

+1

@webworm是的,這正是目的。既然你使用的是'SingleOrDefault',而不是'Single',那麼就有可能返回'null'。 – dasblinkenlight