如何使用 DataView 的 RowFilter 使用关键字“IN”来过滤集合

Posted

技术标签:

【中文标题】如何使用 DataView 的 RowFilter 使用关键字“IN”来过滤集合【英文标题】:How do you use DataView's RowFilter using keyword 'IN' to filter collection 【发布时间】:2011-10-04 13:52:15 【问题描述】:

我想过滤填充在 DataView 中的集合。我为此使用的控件是一个多选复选框组合框。从这里返回的字符串是 'val1, val2, val3'。然后我将它传递给一个 sql 查询语句,以便能够用作我的 FilterExpression。但是,当将我的表达式分配给 dataView.RowFilter = somethingFilterString 时,我的表达式为 Something IN (val1, val2, val3) 时会出现无法找到列 val1 的错误。有大神可以帮忙吗???

【问题讨论】:

我猜你是在比较字符串——你在val1 ('val1') 周围加了引号吗? 【参考方案1】:

如果val1, val2, val3 的值是字符串(例如"apples, pears, bananas"),那么您需要查询文本来显示它们是字符串,否则它必须假定它们是列名。

如果您要像这样构建逗号分隔的列表:

var csv = string.Join(",", comboBox.SelectedValues); //guess on combo box property

...那么您可以执行以下操作来获取带引号的值:

[Test]
public void SO6680770()

    var cols = new[]  "apples", "pears", "bananas" ;

    var csv = string.Join(", ", cols.Select(s => string.Concat("'", s, "'")));

    Assert.AreEqual("'apples', 'pears', 'bananas'", csv);

【讨论】:

以上是关于如何使用 DataView 的 RowFilter 使用关键字“IN”来过滤集合的主要内容,如果未能解决你的问题,请参考以下文章

VB.NET Dataview Rowfilter 按时间

DataView 行过滤器表达式 C#

使用过滤器抛出异常

DataSetDataTableDataView三者关系及DataView 常见用法

C# 在 .NET 1.1 中将 DataView 转换为表(DataTable)

C# 如何撰写将一个Datatable的所有奇数行提取出来生成一个表,所有偶数行提取出来生成一个表?