这个linq查询有什么问题?

时间:2010-08-16 14:33:15

标签: vb.net linq

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim ds As DataSet
    ds = getData()
    Dim dt As DataTable = ds.Tables(0)
    Dim gridViewData = From r As DataRow In dt.Rows Select r.Item("foo"), r.Item("bar")
    GridView1.DataSource = gridViewData
    GridView1.DataBind()
End Sub

我刚编写了前面的代码,我得到以下编译时错误:“只能从没有参数的简单或限定名称推断范围变量名”。为什么我会收到此错误?我该如何修复我的代码?

2 个答案:

答案 0 :(得分:6)

编辑:好的,我现在明白了这个问题。它在投影中。试试这个:

Dim gridViewData = From r As DataRow In dt.Rows _
                   Select Foo = r.Item("foo"), Bar = r.Item("bar")

基本上它不知道投影中的属性叫什么。

答案 1 :(得分:2)

不幸的是,我不知道这个的VB语法,所以我只需要展示C#并希望你能解决它:

from DataRow r in dt.Rows
select new 
{
     r.Item("Foo"),
     r.Item("bar")
}

这是说“创建一个具有两个属性的新类”,但它不知道您希望这些属性命名。如果你做过这样的事情:

from DataRow r in dt.Rows
select new 
{
     r.Count,
     r.NumRows
}

然后它会假设您需要名为CountNumRows的属性,但是对于您的属性,它必须继续的是Item,两者都使用它。

解决这个问题,您必须明确指定名称:

from DataRow r in dt.Rows
select new 
{
     Foo = r.Item("Foo"),
     Bar = r.Item("bar")
}