6

我正在使用带有 c# 的数据表,我想用 between.but 过滤数据表。但是当我运行我的代码时,抛出异常“表达式包含不支持的运算符 'Between'”

这是代码:

string str = "ITEM_ID BETWEEN  " + textEdit1.Text + " AND  " +    textCUS_COA_CODE.Text + " ";

DataTable dt = new DataTable();
dt = this.pAK_ASIADataSet.sp_STOCKS_report;

dt.DefaultView.RowFilter =str;
4

6 回答 6

7

我还没有尝试过,但是使用"ITEM_ID >= bla AND ITEM_ID <= bla2"应该可以正常工作。

于 2013-02-19T06:49:52.577 回答
4

查看 MSDN 论坛,似乎BETWEEN不是行过滤器支持的运算符:

http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/1220e0f5-4bab-4b53-b8b6-a7a9e8420558/

你可以用 AND 代替:

ITEM_ID >= val_oneAND ITEM_ID <= val_two
于 2013-02-19T06:49:55.160 回答
3

You also can use LINQ to DataTable:

var result = dt.AsEnumerable()
  .Where(row => {
                    var itemId = row.Field<int>("ITEM_ID");
                    var value1 = int.Parse(textEdit1.Text);
                    var value2 = int.Parse(textCUS_COA_CODE.Text);

                    return itemId >= value1 && itemId <= value2;
                });
于 2013-02-19T06:51:36.563 回答
1

您不能将 between 关键字与 datatable RowFilter 表达式一起使用,您可以使用 <= 和 >= 运算符代替 between 关键字,如下所示:

string str = "ITEM_ID <=" + textEdit1.Text + " AND  ITEM_ID>=" +    textCUS_COA_CODE.Text + " ";

DataTable dt = new DataTable();
dt = this.pAK_ASIADataSet.sp_STOCKS_report;

dt.DefaultView.RowFilter =str;
于 2013-02-19T06:52:44.260 回答
1

只需使用另一个过滤器表达式即可:

String str = String.Format("ITEM_ID >= {0} AND ITEM_ID <= {0}", textEdit1.Text);

DataTable dt = new DataTable();
dt = this.pAK_ASIADataSet.sp_STOCKS_report;

dt.DefaultView.RowFilter =str;
于 2013-02-19T06:53:12.183 回答
1

Try this:

var rows = dt.Select(String.Format("ITEM_ID >= {0} AND ITEM_ID <= {1}", textEdit1.Text, textCUS_COA_CODE.Text))
于 2013-02-19T06:50:43.477 回答