【问题标题】:Query a datatable where text contains查询文本包含的数据表
【发布时间】:2014-12-18 18:10:08
【问题描述】:

基于这个问题:how to run query on dataset?

我正在尝试从我的数据集中查询文本包含字符串的数据表,类似于 String.Contains 方法或 sql LIKE 运算符。

这是我迄今为止尝试过的:

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        DataTable tbl = globals.UserDataSet.Tables[0];
        DataRow[] tempDataRows = tbl.Select("USER_ID Like " + textBox1.Text + " OR THE_NAME Like " + textBox1.Text);
    }

这会产生 System.Data.SyntaxError 错误。

是否可以在数据表中查询包含子字符串的文本?有更好的方法吗?

【问题讨论】:

  • 你总是可以使用 LINQ
  • @Kevin 我喜欢这个主意,您能否请我参考一些使用 LINQ 在数据表中搜索的文档?

标签: c# .net datatable oledb


【解决方案1】:

几件事:

  • 首先,您需要用单引号将您的值括起来。 (在链接的question 中有)
  • 其次,如果您尝试比较 Contains,那么您的值应该是 % (就像 SQL)

所以你的陈述应该是:

DataRow[] tempDataRows = tbl.Select("USER_ID Like '%" + textBox1.Text + "%' OR THE_NAME Like '%" + textBox1.Text +"%');

您还可以使用LINQ to DataSet/DataTable 来过滤您的结果,例如:

var query = tbl.AsEnumerable()
    .Where(r => r.Field<string>("USER_ID").Contains(textBox1.Text) &&
                r.Field<string>("THE_NAME").Contains(textBox1.Text));

【讨论】:

    【解决方案2】:

    您需要在字符串周围添加单引号:

    DataRow[] tempDataRows = tbl.Select("USER_ID Like '" + textBox1.Text + "' OR THE_NAME Like '" + textBox1.Text + "'");
    

    【讨论】:

    • 也是使用Like '%'时的百分比
    • 糟糕,谢谢我的错误。 “Like”运算符似乎不起作用,例如,从列表中键入已知 USER_ID 的一部分不会返回任何行,除非我键入整个内容。我将修改我的问题以反映这一点。
    • 打败我@AGhazal
    • @AGhazal 我假设(显然是错误的)运算符包含在文本值中。
    【解决方案3】:

    您需要单引号和 % 围绕字符串值。它引发语法错误,因为构造的查询具有来自输入的原始字符串,如“WHERE THE_NAME Like John”中。试试这个:

    tbl.Select("USER_ID Like '%" + textBox1.Text + "%' OR THE_NAME Like '%" + textBox1.Text + "%'");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      相关资源
      最近更新 更多