VB.NET - 无法转换类型为'WhereSelectEnumerableIterator`2的对象

时间:2013-11-09 23:20:06

标签: vb.net linq entity-framework

我正在尝试使用VB.NET加载Gridview,但是当我执行Linq查询时,我收到以下消息。我正在执行存储过程。我检查SQL Server上的SP,它返回结果,但我不能让VB.Net接受结果。我对Linq和Entity Framework很新。任何帮助将不胜感激。

  

消息=无法转换类型为“WhereSelectEnumerableIterator2[ WindowsApplication1.uspGetAll_Result ,WindowsApplication1.uspGetAll_Result]”的对象,以键入“System.Linq.IQueryable 1 [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 = ...行上失败。

1 个答案:

答案 0 :(得分:0)

根据MSDN,数据源必须具有以下类型才能绑定到它。

  

DataGridView类支持标准的Windows窗体数据绑定模型。这意味着数据源可以是实现以下接口之一的任何类型:   IList接口,包括一维数组。   IListSource接口,例如DataTable和DataSet类。   IBindingList接口,例如BindingList(Of T)类。   IBindingListView接口,例如BindingSource类。

你所拥有的是IQueryable(Of T)

它继承自IEnumerable,因此不实现上述任何接口。

使用.ToList将其强制转换为List(Of T)将解决您在评论中说明的问题。

gvResults.DataSource = CatFNQuery.ToList()

也许你甚至可以尝试Bindingsource。

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

由于datasource for a bindingsource支持更多类型。