1

VB.NET を使用して Gridview を読み込もうとしていますが、Linq クエリを実行すると以下のメッセージが表示されます。ストアド プロシージャを実行しています。SQL Server で SP を確認すると、結果が返されますが、VB.Net で結果を受け入れることができません。Linq と Entity Framework は初めてです。どんな助けでも大歓迎です。

Message = タイプ ' WhereSelectEnumerableIterator2[WindowsApplication1.uspGetAll_Result ,WindowsApplication1.uspGetAll_Result]' のオブジェクトをタイプ ' System.Linq.IQueryable1[WindowsApplication1.uspGetAll_Result`]' にキャストできません。

これがコードです。

    'Using Linq to Entities
    Dim CatFNQuery As IQueryable(Of uspGetAll_Result)

    CatFNQuery = From x In fanDbContext.uspGetAll(Nothing, Nothing, Nothing) _
                 Select x

    'MsgBox(CatFNQuery.Count)
    If CatFNQuery Is Nothing Then
        '
    Else
        gvResults.DataSource = CatFNQuery
    End If

CATFNQUERY = ... 行で失敗しています。

4

1 に答える 1

0

MSDNによると、データソースをバインドできるようにするには、データソースが次のタイプである必要があります。

DataGridView クラスは、標準の Windows フォーム データ バインディング モデルをサポートします。つまり、データ ソースは、次のインターフェイスのいずれかを実装する任意の型にすることができます。 1 次元配列を含む IList インターフェイス。DataTable や DataSet クラスなどの IListSource インターフェイス。BindingList(Of T) クラスなどの IBindingList インターフェイス。BindingSource クラスなどの IBindingListView インターフェイス。

あなたが持っているのはIQueryable(Of T)です

これは IEnumerable を継承しているため、上記のインターフェイスを実装していません。

.ToList を使用して List(Of T) にキャストすると、コメントに記載されているように問題が解決します。

gvResults.DataSource = CatFNQuery.ToList()

Bindingsource を試すこともできます。

Dim bindingSource as New BindingSource()
bindingSource.DataSource = CatFNQuery
gvResults.DataSource = bindingsource

bindingsourceのデータソースは、より多くの型をサポートするためです。

于 2013-11-10T09:14:23.323 に答える