2017-03-16 3 views
0

Ich habe eine Datentabelle, die ich mit DataView filtern soll. Die Filterbedingung basiert auf einem Enum-Wert und einem datablen Spaltenwert, der eine Zeichenfolge ist. Im Folgenden finden Sie, was ichVergleichen DataTable Column Value mit Aufzählung in Zeilenfilter C#

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

Da die Statusspalte zu tun versuche String ist, wird die Zeilenfilter nicht funktionieren. Ich habe versucht, die Spalte "Status" von "Enum" zu nehmen, aber es funktioniert immer noch nicht.

Bitte vorschlagen.

Dank

+1

Enum.Valid.ToString() –

Antwort

0

von DataView.Filter Dokumentation: „Siehe die Expression-Eigenschaft der Datacolumn-Klasse für weitere Informationen“

von DataColumn.Expression Documentation

Für Spalten, die Aufzählungswerte enthalten, warf den Wert zu einem Integer-Datentyp. Zum Beispiel: "EnumColumn = 5"

+0

OP schrieb, dass der Datatable Spalte Typ string ist – dlatikay

0

Wenn die String-Werte in der Status Spalte die Kennung Namen der Enum-Mitglieder sind, dann können Sie einen String-Vergleich zu tun:

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

Documentation:

Wenn Sie einen Ausdruck für einen Filter zu erstellen, setzen Sie Strings mit einfachen Anführungszeichen

Wenn auf der anderen Seite, die Werte in den Status Spalt des Typs Enum sind, dann müssen Sie einen numerischen Vergleich zu tun:

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

das gibt mir eine Ausnahme, dass „=“ Operator kann nicht zwischen String und Aufzählungstyp –

+0

In diesem Fall verwendet werden, bezweifle ich, dass die Behauptung " die Sta tus-Spalte ist eine Zeichenfolge "(System.String) ist wahr. – dlatikay

+0

Jetzt habe ich die Spalte "Status" vom Typ "Enum" geändert. –

0

So es funktionierte wie das für mich ohne Dataview mit

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