简体   繁体   English

如何在c#中使用between之间过滤数据表

[英]How to filter datatable using between in c#

I am using data table with c# and i want to filter data table with between.but when i run my code following exception is thrown "The expression contains unsupported operator 'Between'" 我正在使用带有c#的数据表,我希望用它来过滤数据表。但是当我运行我的代码后抛出异常“表达式包含不支持的运算符'之间'”

here is the code: 这是代码:

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;

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

Looking on the MSDN forums, it seems that BETWEEN is not a supported operator for row-filters: 在MSDN论坛上看,似乎BETWEEN不是行过滤器支持的运算符:

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

Can you substitute for an AND: 你能替代一个AND:

ITEM_ID >= val_oneAND ITEM_ID <= val_two

You also can use LINQ to DataTable : 您还可以使用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;
                });

尝试这个:

var rows = dt.Select(String.Format("ITEM_ID >= {0} AND ITEM_ID <= {1}", textEdit1.Text, textCUS_COA_CODE.Text))

You can't use between keyword with datatable RowFilter expression, you can use the <= and >= operator in place of between keyword like below: 您不能在关键字与数据表RowFilter表达式之间使用,您可以使用<=和> =运算符代替以下关键字:

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;

Simply use another filter expression as a walk around: 只需使用另一个过滤表达式作为四处走动:

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM