Vb.net “类型为“”的表达式不可查询”错误

Vb.net “类型为“”的表达式不可查询”错误,vb.net,visual-studio-2013,Vb.net,Visual Studio 2013,我正在尝试完成课堂作业,遇到以下错误: 错误1“家庭作业\代码\示例.表单1.状态”类型的表达式不可查询。确保没有缺少LINQ提供程序的程序集引用和/或命名空间导入。D:\Users\Stryke\Documents\visualstudio 2013\Projects\家庭作业代码示例\家庭作业代码示例\Form1.vb 11 32家庭作业代码示例 我以前从未遇到过这种情况,通过Google、MSDN和这些论坛进行搜索都告诉我,我必须为我的程序定位正确的.NET框架,但是我完全不知道应该定位哪

我正在尝试完成课堂作业,遇到以下错误:

错误1“家庭作业\代码\示例.表单1.状态”类型的表达式不可查询。确保没有缺少LINQ提供程序的程序集引用和/或命名空间导入。D:\Users\Stryke\Documents\visualstudio 2013\Projects\家庭作业代码示例\家庭作业代码示例\Form1.vb 11 32家庭作业代码示例

我以前从未遇到过这种情况,通过Google、MSDN和这些论坛进行搜索都告诉我,我必须为我的程序定位正确的.NET框架,但是我完全不知道应该定位哪个框架,因为建议的答案在重新编译时都会给出相同的错误。目前,我正在Visual Studio 2013中使用.NET Framework 4.5

我不知道它是否有帮助,但这是我的代码,这样你就可以看到我想实现的目标

公开课表格1 作为状态的暗状态 私有子btnDisplay\u单击发件人作为对象,e作为事件参数处理btnDisplay。单击 状态=新状态 Dim query=来自状态中的st 让name=states.name 让密度=状态。密度 按密度递减排序 选择名称、密度 端接头 私有子状态信息\u CellContentClicksender作为对象,e作为DataGridViewCellEventArgs处理状态信息。CellContentClick 端接头 阶级国家 私有m_名称、m_缩写、m_日期作为字符串 专用m_区域,m_pop为整数 公共财产名称 收到 返回m_名称 结束 设定值 m_name=值 端集 端属性 公共财产缩写 收到 返回m_abbr 结束 设定值 m_abbr=值 端集 端属性 公共财产合并日期 收到 返回m_日期 结束 设定值 m_日期=值 端集 端属性 公共财产土地面积 收到 返回m_区 结束 设定值 m_面积=值 端集 端属性 公共财产人口 收到 返回m_pop 结束 设定值 m_pop=值 端集 端属性 公共功能密度 将密度设置为整数 人口密度=人口/土地面积 返回密度 端函数 末级 末级
Linq需要遍历多个对象。在您的情况下,它可以是状态类的列表或集合

类型为ListOf的示例 换乘线路

作为状态的暗状态 到

作为状态列表的Dim状态 及

状态=新状态 进入

状态=新的状态列表 使用数组的示例 换乘线路

作为状态的暗状态 到

作为状态的暗状态 及

状态=新状态 进入

ReDim状态10'或在内部使用变量
下面是一个如何填充数据的示例。我还修复了您查询中的一些错误。将您的查询与我的查询进行比较,看看我更改了什么

' initialize a list with some values
Dim states = New List(Of State) From {
    New State With {.Name = "Ohio", .Population = 10000, .landArea = 10},
    New State With {.Name = "Texas", .Population = 20000, .landArea = 300},
    New State With {.Name = "Florida", .Population = 5000, .landArea = 1000}
}

' query the list
Dim query = From st In states
        Let name = st.Name
        Let density = st.Density()
        Order By density Descending
        Select name, density
我还改进了State类,以使用适当的数据类型而不是对象

Class State

    Private m_name, m_abbr, m_date As String
    Private m_area, m_pop As Integer

    Public Property Name As String
        Get
            Return m_name
        End Get
        Set (value As String)
            m_name = value
        End Set
    End Property
    Public Property Abbreviation As String
        Get
            Return m_abbr
        End Get
        Set(value As String)
            m_abbr = value
        End Set
    End Property
    Public Property joinDate As String
        Get
            Return m_date
        End Get
        Set(value As String)
            m_date = value
        End Set
    End Property
    Public Property landArea As Integer
        Get
            Return m_area
        End Get
        Set(value As Integer)
            m_area = value
        End Set
    End Property
    Public Property Population As Integer
        Get
            Return m_pop
        End Get
        Set(value As Integer)
            m_pop = value
        End Set
    End Property

    Public Function Density() As Double
        Dim popDensity As Double
        popDensity = Population / landArea
        Return popDensity
    End Function

End Class

我在两个列表中都提到了Linq,还有其他建议吗?我在这里放了一个屏幕截图:我喜欢你的解决方案,不幸的是,我必须使用一个对象数组,从文本文件中读取。所以我想现在我有一个完全不同的问题,因为现在抛出的错误与String类型的值有关,不能转换为类状态的对象。我会一直努力,直到把它做好,谢谢你的帮助!这里有使用数组的解决方案:谢谢你的帮助,我看到了我在你的例子中犯的错误,我试图初始化错误的数组。再次感谢您的帮助!states是State类的单个实例。它需要某种状态集合才能被查询。@miroxlav,我试图实现的是在DataGridView框中显示一个状态及其人口密度的列表,按密度排序,该部分还没有编码,因为我一完成查询就会弹出错误。@Mark,你是对的,我忽略了创建对象数组,这要感谢方向正确的那一点。一旦我完成了更新,我会发回一个更新。因为这个解决方案是可行的,但我选择的答案是最适合我具体需要的。谢谢