DataView.RowFilter是否支持'和......之间'?

时间:2014-08-13 20:41:40

标签: .net expression dataview rowfilter datacolumn

我要更改程序以根据一系列值过滤数据。

虽然效率不高,但信息会在指定的时间段内加载到内存中,并根据一些单独处理的标准进行过滤,无论是生成CSV报告。

将信息加载到DataView中,然后根据正在处理的操作对其进行过滤。每三个进程处理此DataView的子集。然后通过DataView.RowFilter属性过滤器确定子集。

根据我到目前为止发现的内容,适用于RowFilter的{​​{3}}似乎充分利用了SQL where子句语法,如下所示。

dataView.RowFilter = "Id = 999";
dataView.RowFilter = "Name like 'Stack%'"
dataView.RowFilter = "Id in (1, 2, 3, 10, 16, 34)"
dataView.RowFilter = "Amount < 5000"

如本帖所述:DataColumn.Expression

现在我想知道,在DataView.RowFilter属性支持SQL DataView RowFilter Syntax [C#]条件的情况下,是否存在遗留的不易测试代码?

这是一个有效的DataColumn.Expression申请DataView.RowFilter吗?

dataView.RowFilter = "Name = 'StackOverflow' and Amount between 5000 and 5999";

1 个答案:

答案 0 :(得分:1)

如果我没记错,Between不被支持,但为什么不简单:

dataView.RowFilter = "Name = 'StackOverflow' and Amount >= 5000 and Amount <= 5999";

MSDN:仅提及Between作为重新保留的字词,但表达式中不支持此字段。

我已对其进行了测试,并使用BETWEEN引发EvaluateException

  

{“表达式包含不支持的运算符'Between'。”}

这是测试代码,样本数据:

DataTable table = new DataTable();
table.Columns.Add("Name");
table.Columns.Add("Amount", typeof(int));
table.Rows.Add("Site1", 1000);
table.Rows.Add("OtherSite", 3000);
table.Rows.Add("StackOverflow", 5100);
table.Rows.Add("StackOverflow", 5500);
table.Rows.Add("StackExchange", 5900);

var dataView = table.DefaultView;

首先,使用AND的有效表达式:

dataView.RowFilter = "Name = 'StackOverflow' and Amount >= 5000 and Amount <= 5999";

Console.Write("Count: {0}\r\nValues:\r\n{1}"
    , dataView.Count
    , string.Join(Environment.NewLine, dataView.Cast<DataRowView>() 
        .Select(o => string.Join(",", o.Row.ItemArray))));

输出:

Count: 2
Values:
StackOverflow,5100
StackOverflow,5500

现在使用BETWEEN的无效语法:

dataView.RowFilter = "Name = 'StackOverflow' and Amount BETWEEN 5000 and 5999"; // boom