2012-01-09 21 views
2

テーブルから選択を返すストアドプロシージャがあります。テーブルは動的に選択されます。プロシージャは次のようになります。動的SQLストアドプロシージャからLinq to 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-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

ストアドプロシージャは、返される結果の種類を選択しています。コンパイル時に一連のCustomersが返されることはわかりません。それは犬かもしれない、飛行機かもしれないので、私はこれが動作するとは思わない。私はあなたがsoapboxから来ている場所を取得し、私はそれを助けることができる場合は通常、動的LinqまたはSQLを使用することはありませんが、この場合の詳細はそれを必要とするようです。 ORMを使用しているかどうかを気にする必要はありません.Net Listにデータを読み込む方法が必要です。 –