将DataTable列值与行过滤器C#中的枚举进行比较

时间:2017-03-16 08:49:19

标签: c# enums dataview rowfilter

我有一个Datatable,我想使用DataView进行过滤。过滤条件基于Enum值和数据表列值,即字符串。以下是我要做的事情

DataView dv = data.DefaultView;
dv.RowFilter = "Status =" + Enum.Valid;

由于状态列是字符串,因此行过滤器不起作用。我尝试从“Enum”获取“状态”列,但仍然无效。

请建议。

由于

3 个答案:

答案 0 :(得分:0)

来自DataView.Filter文档的

:“有关详细信息,请参阅DataColumn类的Expression属性”

来自DataColumn.Expression Documentation

  

对于包含枚举值的列,请将值强制转换为整数数据类型。例如:   “EnumColumn = 5”

答案 1 :(得分:0)

如果Status列中的字符串值是枚举成员的标识符名称,那么您可以进行字符串比较:

var dv = data.DefaultView;
var enumValueAsString = Enum.Valid.ToString();
dv.RowFilter = $"Status = '{enumValueAsString}'";

Documentation

  

为过滤器创建表达式时,请用单引号括起字符串

如果另一方面,Status列中的值属于Enum类型,则需要进行数值比较:

var dv = data.DefaultView;
var enumValueAsInt = (int)Enum.Valid;
dv.RowFilter = $"Status = {enumValueAsInt}";

答案 2 :(得分:0)

因此,在不使用DataView

的情况下,它对我有用
 var result = dataTable.AsEnumerable()
            .Where(x => x.Field<IfmEqcStatus>("Status") == Enum.Valid);