Je veux juste dire à tout le monde que ce qui circule le plus sur Internet n'est pas nécessairement exact.
Je souhaite effectuer une recherche sur Google pour déterminer si deux DataTables sont égaux. La méthode la plus courante est la méthode suivante.
code
bool privé ValueEquals (DataTable objA, DataTable objB)
{
si(objA != nul && objB != nul)
{
si(objA.Rows.Count != objB.Rows.Count)
{
renvoie faux ;
}
si(objA.Columns.Count != objB.Columns.Count)
{
renvoie faux ;
}
}
DataView dv = nouveau DataView(objB);
clés de chaîne = "" ;
foreach (colonne DataColumn dans objA.Columns)
{
clés += ","+col.ColumnName;
}
dv.Sort = clés.Substring(1);
foreach (ligne DataRow dans objA.Rows)
{
si(ligne.RowState != DataRowState.Deleted)
{
si (dv.Find (row.ItemArray) <0)
{
renvoie faux ;
}
}
autre
{
renvoie faux ;
}
}
renvoie vrai ;
}
L’auteur de ce morceau de code ne peut être vérifié, mais les rumeurs sont nombreuses.
Je ne sais pas si la personne qui l’a réimprimé a vérifié l’exactitude de cette méthode, ou s’il l’a simplement réimprimé.
Cette méthode est en fait fausse.
Si deux DataTables ont le même nombre de lignes et de colonnes, mais que la première ligne est la même et la deuxième ligne est différente, la méthode de comparaison ci-dessus renverra toujours True.
J'écris ici pour dire à la majorité des gens (y compris moi) que ce qui circule le plus sur Internet n'est pas nécessairement correct. Je veux aussi dire quelque chose aux anciens combattants, veuillez vérifier l'exactitude du contenu lors de sa réimpression. c'est bon pour moi quoi qu'il arrive, tout est bon pour les autres.
C'est la première fois que je poste. Si ce que je dis est faux, j'espère que vous ne le suggérerez pas.
J'espère également qu'un expert pourra fournir une méthode correcte et efficace pour comparer si deux DataTables sont égaux.
J'ai utilisé une méthode plus ancienne
code
public bool DataTableTheSame (DataTable Table1, DataTable Table2)
{
si (Tableau1 == nul || Tableau2 == nul)
{
renvoie faux ;
}
si (Table1.Rows.Count != Table2.Rows.Count)
{
renvoie faux ;
}
si (Table1.Columns.Count != Table2.Columns.Count)
{
renvoie faux ;
}
pour (int i = 0; i < Table1.Rows.Count; i++)
{
pour (int j = 0; j < Table1.Columns.Count; j++)
{
if (Table1.Rows[i][j].ToString() != Table2.Rows[i][j].ToString())
{
renvoie faux ;
}
}
}
renvoie vrai ;
}