LINQ强打字

时间:2012-01-07 20:09:08

标签: vb.net linq entity-framework linq-to-entities

我知道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;它工作正常!

2 个答案:

答案 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