2017-03-16 1 views
0

J'ai une base de données que je veux filtrer en utilisant DataView. La condition de filtre est basée sur une valeur Enum et une valeur de colonne datatable qui est une chaîne. Voici ce que j'essaie de faireComparer la valeur de la colonne DataTable avec Enum dans le filtre de ligne C#

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

Comme la colonne d'état est une chaîne, le filtre de lignes ne fonctionnera pas. J'ai essayé de prendre la colonne "Status" à partir de "Enum" mais ça ne marche toujours pas.

Veuillez nous suggérer.

Merci

+1

Enum.Valid.ToString() –

Répondre

0

de DataView.Filter documentation: "Voir la propriété Expression de la classe DataColumn pour plus d'informations"

de DataColumn.Expression Documentation

Pour les colonnes qui contiennent des valeurs d'énumération, jettent la valeur à un type de données entier. Par exemple: "EnumColumn = 5"

+0

OP a écrit que le type de colonne datatable est une chaîne – dlatikay

0

Si les valeurs de chaîne dans la colonne Status sont les noms d'identification des membres de ENUM, alors vous pouvez faire une comparaison de chaîne:

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

Documentation:

Lorsque vous créez une expression pour un filtre, placer les chaînes entre guillemets simples

Si d'autre part, les valeurs de la colonne Status sont du type Enum, alors vous devez faire une comparaison numérique:

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

cela me donne une exception « = » opérateur ne peut pas être utilisé entre la chaîne et le type ENUM –

+0

Dans ce cas, je doute que l'affirmation " Le sta tus column is string "(System.String) est vrai. – dlatikay

+0

Maintenant j'ai changé la colonne "Status" pour être de type "Enum". –

0

Il a travaillé pour moi comme cela sans l'aide DataView

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