2017-03-16 98 views
0

我有一個Datatable,我想要過濾使用DataView。篩選條件基於枚舉值和字符串數據列值。以下是我正在嘗試做的事比較DataTable列值與行篩選器中的枚舉C#

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

由於狀態列是字符串,所以行過濾器將不起作用。我嘗試了使用「Enum」的「Status」列,但仍然無效。

請建議。

感謝

+1

Enum.Valid.ToString() –

回答

0

從DataView.Filter文檔: 「看DataColumn類的Expression屬性的詳細信息,」

DataColumn.Expression Documentation

對於包含枚舉值的列,施放價值爲整數數據類型。例如: 「EnumColumn = 5」

+0

OP寫道,數據表列類型爲字符串 – dlatikay

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}"; 
+0

這給了我一個異常「=」操作符不能字符串和枚舉類型 –

+0

之間使用在這種情況下,我懷疑,斷言「 Sta tus列是字符串「(System.String)是真的。 – dlatikay

+0

現在我將「狀態」列更改爲「Enum」類型。 –

0

所以它的工作對我這個樣子,而無需使用數據視圖

var result = dataTable.AsEnumerable() 
      .Where(x => x.Field<IfmEqcStatus>("Status") == Enum.Valid);