2009-03-03 6 views
2

グリッドビューをlinqにバインドしようとしていますが、これはストアドプロシージャを使用しているSQLクエリです。ページを実行すると、次のエラーが表示されます。LinqクエリをGridviewにバインドするときに 'データソースが無効な型です。'

データソースは無効です。 IListSource、IEnumerable、またはIDataSourceのいずれかである必要があります。

var db = new TableItemDataContext(); 
var q = db.sp_SearchForItems("1","2","3","4"); 
GridView1.DataSource = q; 
GridView1.DataBind(); 

任意のアイデア?

答えて

3

ToList()拡張メソッドを使用して、クエリをアイテムのリストに変換します。

GridView1.DataSource = q.ToList(); 

また、これは、変換時にクエリを実行する効果を持っていますので、あなただけのIEnumerableにキャストがうまくいくかどうかを確認することをお勧めします。

:コメントトレイルに基づいて明確にする。この問題は、SPROCの構築とLINQによる戻り値の検出が不可能であることが判明しました。 Stored Procedure & LINQ, Dmbl File unable to interpret the result setのようにSPROCを変更すると、LINQはSPROCを元に戻すことができるスキーマを検出することができました。

+0

クイック返信ありがとうございます!私はToList()を使用してIntellisenseを取得しませんでしたが(System.Linqを使用しています)、コンパイルされたときには、 '' int ''の定義は 'ToList'の定義を含まず、拡張メソッド 'ToList'タイプintのが見つかりました。アイデア? –

+0

Linqはストアドプロシージャから返されたテーブルのスキーマを判断できず、intを返すと考えます。私は一時テーブルを含むストアドプロシージャにいくつかの問題があることを知っています。次のコメントの質問にリンクしてください... – tvanfosson

+0

http://stackoverflow.com/questions/521736/stored-procedure-linq-dmbl-file-unable-to-interpret-the-result-set - 入手できればToList()を使わずに直接クエリを実行することができます。 – tvanfosson

関連する問題