2012-01-09 36 views
2

我有一個存儲過程,從表中返回一個選擇。該表是動態選擇的。該過程如下所示:動態SQL存儲過程到LINQ到SQL

ALTER Procedure [dbo].[GetRecordsInViewPort] 
    @DatabaseName VarChar(100), 
    @TableName VarChar(100), 
AS 
    Declare @SQL VarChar(1000) 

    SELECT @SQL = 'SELECT * FROM ' 
    SELECT @SQL = @SQL + + @DatabaseName + '.dbo.' + @TableName 

    EXEC(@SQL) 

它在SQL執行時正常工作。我如何從Linq-to-SQL使用這個過程?當我嘗試執行它時,我只返回0。 Linq-to-SQL設計器中的存儲過程的返回類型屬性設置爲(None),並且無法修改。

是否可以動態地映射存儲過程結果,然後獲得List<<r>dynamic>

簡而言之,我認爲我希望接受存儲過程的結果作爲動態列表,其屬性可以通過反射在運行時訪問。有任何想法嗎?

此外,如果這在Linq-To-Entities中更容易實現,那麼我對任何事情都是開放的。

回答

1
IEnumerable<Customer> customers = dataContext.ExecuteQuery<Customer>(
    @"EXEC GetRecordsInViewPort {0},{1}", "databaseName", "Customer"); 

List<Customer> result = customers.ToList(); 

<Soapbox> 

我期待接受一個存儲過程的結果作爲動態列表,其屬性我可以在運行時

LinqToSql整點訪問是構造編譯器檢查的查詢並獲取編譯器檢查的結果。如果你不想做這些事情,你不應該使用這個ORM。

你可以使用SqlConnection.ExecuteReader明白地獲取數據。

</Soapbox> 
+0

存儲過程是選擇將返回哪種類型的結果。我不會知道一組客戶是在編譯時返回的。它可能是狗,它可能是飛機,所以我認爲這不會起作用。我得到了你來自soapbox的地方,如果我可以幫助的話,我通常不會使用動態的Linq或SQL,但是這種情況的具體情況似乎需要它。如果它使用ORM,我可以不在意,我只需要一種將數據讀入.Net列表的方法。 – 2012-01-09 21:47:54