Le code suivant lit un fichier CSV dans un DataTable. Il boucle ensuite à travers toutes les colonnes DataTable et tente de générer un compte de toutes les valeurs distinctes dans chaque colonne en utilisant la requête Linq:Pourquoi ma requête Linq GroupBy ne renvoie-t-elle pas les valeurs de comptage correctes?
var g = allValues.AsEnumerable().GroupBy(i => i);
Pourquoi le « grp.Count() » valeur supérieure à jamais 1 même si je sais que toutes les colonnes contiennent des valeurs en double?
private void button13_Click(object sender, System.EventArgs e)
{
DataSet ds = GetDataFromCSVFile(-1);
DataTable table = ds.Tables[0];
int test = 0;
string[] columnToSearch = { "" };
IList<ColumnDetail> colDetails = new List<ColumnDetail>();
foreach (DataColumn col in table.Columns)
{
columnToSearch[0] = col.ToString();
DataTable allValues = GetAllValuesFromColumn(table, columnToSearch);
var g = allValues.AsEnumerable().GroupBy(i => i);
test = 0;
foreach (var grp in g)
{
if (grp.Count() > 1)
MessageBox.Show(" grp.Key.ItemArray[0].ToString() : " + grp.Key.ItemArray[0].ToString() + " Cnt: " + grp.Count());
test++;
}
MessageBox.Show("Count is: " + test);
}
}
Merci Servy. Cela a résolu mon problème. J'ai modifié la ligne: var g = allValues.AsEnumerable(). GroupBy (i => i); à var g = allValues.AsEnumerable(). GroupBy (i => i, DataRowComparer.Default); – xpanzive