【问题标题】:using linq to select a column from a datatable使用 linq 从数据表中选择一列
【发布时间】:2013-01-31 23:38:05
【问题描述】:

目前我正在使用 sql 并点击数据库来填充下拉列表。

Dim sqlStatement = "SELECT DISTINCT IMLOCN FROM table order by IMLOCN desc"
    LocationDropDown.DataSource = DB.sql(dbSalesWeb, sqlStatement)
    LocationDropDown.DataTextField = "IMLOCN"
    LocationDropDown.DataBind()
    LocationDropDown.Items.Insert(0, "ALL")

DB 是一个自定义类,sql 返回一个 Datatable。我想在已经有 IMLOCN 的数据表上使用 linq

 Protected Sub updateDropDowns(ByVal dt As DataTable)


    Dim location = From u In dt.Rows _
                        Select u("IMLOCN") _
                        Distinct

    LocationDropDown.DataSource = location.ToList
    LocationDropDown.DataBind()

End Sub

我试过了 dt.AsEnumerable()Dim location = From u In dt.AsEnumerable _ Select u.Field(Of String)("IMLOCN") _ Distinct 我希望能够使用 linq,并且想了解更多有关它的信息

【问题讨论】:

  • 你有什么问题?你有错误吗?

标签: vb.net linq datatable


【解决方案1】:

不确定你得到了什么错误,但这个查询应该可以正常工作:

Dim qLocation = (From u In dt.AsEnumerable() _
                Select u.Field(Of String)("IMLOCN")).Distinct()
LocationDropDown.DataSource = qLocation.ToList()
LocationDropDown.DataBind()

【讨论】:

  • 使用上面的 linq 查询我得到错误“无法将 System.Byte 类型的对象转换为 System.string 类型” 在 DB IMLOCN 中是一个很小的 ​​int。当我查看调试器位置时,它没有任何结果。如果我将列切换到 IMSTK,它是 DB Location 中的一个 varchar,实际上有结果,但我收到错误“dataBinding System.String 不包含名为 IMLOCN 的属性”,但我切换并使用了 IMSTK 而不是 IMLOCN ,为什么调试器还是说IMLOCN?
  • 当页面首次加载到 sql 查询的结果时,我将下拉列表数据绑定。这是否会导致将其数据绑定到 linq 结果出现问题?
  • 当我之前将数据绑定到 sql 结果时,我还设置了 datatextfield = "IMLOCN" 是否导致字符串不包含名称为 IMLOCN 的属性错误?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多