/ / Moyen efficace de rechercher et de remplacer des valeurs dans DataColumn - c #, .net, c # -4.0, datatable, datatable.select

Moyen efficace de rechercher et de remplacer des valeurs dans DataColumn - c #, .net, c # -4.0, datatable, datatable.select

J'ai un ensemble de données contenant un DataTable et cette table a 3 colonnes (Column1, Data, Column2) et plusieurs lignes de données.

J'ai également un dictionnaire qui contient la liste des valeurs que je dois rechercher dans DataColumn et les valeurs avec lesquelles je devrais remplacer les valeurs d'origine.

Je veux chercher dans la colonne dont le nom est "Data".

L'image suivante contient la table de données d'origine et le DataTable résultant, ainsi qu'un dictionnaire contenant les clés et les valeurs à rechercher et à remplacer.

DataTable

Quel est le moyen le plus efficace d'effectuer cette opération?

Réponses:

1 pour la réponse № 1

Je suis sûr qu’il existe un meilleur moyen de faire cela en utilisant LinQ, mais cela fera

Dictionary<string,string> dic = new Dictionary<string,string>();
dic.Add("AAA", "A++");
dic.Add("BBB", "B++");
foreach(KeyValuePair<string, string> kvp in dic)
{
DataRow[] sl = dt.Select("DATA="" + kvp.Key + """);
foreach(DataRow r in sl)
r["DATA"] = kvp.Value;
}

La boucle foreach interne pourrait être remplacée par l'expression

 sl.ToList().ForEach(x => x.SetField<string>("DATA", kvp.Value));

mais je n'ai pas testé les performances

Ce n’est probablement pas très efficace pour les grands ensembles de données, mais il convient de considérer une boucle sur les clés du dictionnaire et non sur les lignes individuelles de la table.


0 pour la réponse № 2

Optez pour la simplicité

foreach (DataRow row in dataSet.Tables[0].AsEnumerable())
{
string data = row.Field<string>("Data");

string newData = null;
if (dict.TryGetValue(data, out newData))
{
row.SetField("Data", newData);
}
}

(vous devrez ajouter System.Data.DataSetExtensions aux références de votre projet)


0 pour la réponse № 3

Je voudrais le gérer comme ça:

DataSet ds = new DataSet();
string strNewXmls = ds.GetXml().Replace("AAA", "A++");
System.IO.StringReader srXmlStringReader = new System.IO.StringReader(strNewXmls);
ds.ReadXml(srXmlStringReader, XmlReadMode.IgnoreSchema);

C'est une solution simple et rapide. Vous pouvez le faire avec tous les types de données de votre ensemble de données.

J'espère que ça aide,

Taragneti