我有一个Datatable,我想使用DataView进行过滤。过滤条件基于Enum值和数据表列值,即字符串。以下是我要做的事情
DataView dv = data.DefaultView;
dv.RowFilter = "Status =" + Enum.Valid;
由于状态列是字符串,因此行过滤器不起作用。我尝试从“Enum”获取“状态”列,但仍然无效。
请建议。
由于
答案 0 :(得分:0)
:“有关详细信息,请参阅DataColumn类的Expression属性”
来自DataColumn.Expression Documentation
对于包含枚举值的列,请将值强制转换为整数数据类型。例如: “EnumColumn = 5”
答案 1 :(得分:0)
如果Status
列中的字符串值是枚举成员的标识符名称,那么您可以进行字符串比较:
var dv = data.DefaultView;
var enumValueAsString = Enum.Valid.ToString();
dv.RowFilter = $"Status = '{enumValueAsString}'";
为过滤器创建表达式时,请用单引号括起字符串
如果另一方面,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);