代码之家  ›  专栏  ›  技术社区  ›  Vivian River

这个LINQ查询有什么问题?

  •  3
  • Vivian River  · 技术社区  · 15 年前
    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 回复  |  直到 15 年前
        1
  •  6
  •   Jon Skeet    15 年前

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

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

    基本上,它不知道如何在投影中调用属性。

        2
  •  2
  •   James Curran    15 年前

    不幸的是,我不知道这个的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
    }
    

    然后它会假设您需要调用 Count NumRows 但是对于你的孩子来说 Item ,两者都使用。

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

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