我知道LINQ应该自动返回强类型结果集。当我将ObjectDataSource附加到基于LINQ的方法时(没有显式返回类型),我无法访问LINQ中定义的任何列。
示例方法:
<System.ComponentModel.DataObjectMethod(ComponentModel.DataObjectMethodType.Select)> _
Public Function GetMarketClusterList() As IEnumerable(Of MarketCluster)
Return From d In db.tblMarkets
Select New MarketCluster With {.MarketCluster = d.MarketCluster}
Distinct
End Function
Public Class MarketCluster
Public MarketCluster As String
End Class
修改 我更改了我的代码以使用显式类型并选择进入。至少现在我知道返回类型,但它对原始问题没有帮助。甚至更奇怪,我找到了调试器,如果我做了
&lt;%#Eval(“MarketCluser”)%&gt;它失败并说“在所选数据源上找不到名为MarketCluster的字段或属性”,但如果我这样做&lt;%Container.DataItem.MarketCluser%&gt;它工作正常!
答案 0 :(得分:2)
只需指定返回类型:
Public Function GetMarketClusterList() As IEnumerable(Of MarketCluster)
Return From d In db.tblMarkets
Select d.MarketCluster
Distinct
End Function
(或使用IQueryable
代替IEnumerable
)
...假设d.MarketCluster
的类型为MarketCluster
。
如果Option Strict
正在播放,则返回类型为 required ...这表示您可能不启用它。我强烈建议您为项目启用Option Strict
,无论您是否正在使用LINQ,除非您明确需要后期绑定等(在这种情况下,我会尝试将其限制为只有那些需要它的地方)。
答案 1 :(得分:0)
错误消息说明确错误,我只是错过了它。当它说找不到“财产”时,就意味着集体成员称为“财产”。我将我的代码更改为此,现在它完美无缺。
Private _MarketCluster As String
Public Property MarketCluster As String
Get
Return _MarketCluster
End Get
Set(value As String)
_MarketCluster = value
End Set
End Property