Vb.net LINQ强类型

Vb.net LINQ强类型,vb.net,linq,entity-framework,linq-to-entities,Vb.net,Linq,Entity Framework,Linq To Entities,我知道LINQ应该自动返回强类型结果集。但是,当我将ObjectDataSource附加到基于LINQ的方法时,没有显式的返回类型,我无法访问LINQ中定义的任何列 示例方法: <System.ComponentModel.DataObjectMethod(ComponentModel.DataObjectMethodType.Select)> _ Public Function GetMarketClusterList() As IEnumerable(Of Mark

我知道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
编辑 我将代码更改为使用显式类型,并选择该类型。至少现在我知道了返回类型,但这对解决最初的问题没有帮助。更奇怪的是,我发现如果我使用调试器


它失败了,并说在所选数据源上找不到名为MarketCluster的字段或属性,但如果我这样做了,它工作正常

只需指定返回类型:

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,无论您是否使用LINQ,除非您特别需要后期绑定等。在这种情况下,我会尝试将其限制在需要它的地方。

错误消息中指出了确切的错误,我只是错过了它。当它说找不到属性时,它的意思是称为property的类成员。我把我的代码改成了这个,现在它工作得很好

Private _MarketCluster As String
Public Property MarketCluster As String
    Get
       Return _MarketCluster
    End Get
    Set(value As String)
       _MarketCluster = value
    End Set
End Property

为什么不指定函数的返回类型呢?我认为Distinct不会达到您所期望的效果。它将比较引用,而不是您设置的字符串。MarketCluster指向,并且由于您正在构造列表中的所有对象,您正在对这些引用调用distinct,它们都已经是唯一的。为什么不简单地返回IEnumerableOf字符串,而不是引入包装类?返回类型是IEnumerableOf,而不是MarketCluster。我如何更改它?@just.other.程序员:为什么它是匿名类型?您正在选择d.MarketCluster。。。如果您的实际查询有一个匿名类型的select语句,您应该这样说,因为在这一点上,您不能以强类型的方式将其声明为返回类型。我发布的查询就是我代码中真正的查询。当我使用intellisense检查返回类型时,它告诉我它是一个IQueryableOf.@just.other.programmer:我不是VB程序员,我知道有时候VB引入匿名类型的效果不如C。。。但我不明白为什么在这里会这样。如果只是为了实验而删除Distinct,会发生什么?这里的d.MarketCluster是什么类型的?当你把鼠标悬停在它上面时会发生什么?它是一根绳子。我只是让它成为一个显式类型,请参见问题编辑以避免这部分问题,但仍然无法在我的ODS中正确使用它。