我正在尝试使用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 = ...行上失败。
答案 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支持更多类型。