Trouver les Doublons C#
Je suis nouveau en programmation donc cela peut sembler un peu simple, mais je n'arrive pas à le comprendre.
Je suis en train d'essayer de trouver des doublons qui sont dans un datatable dans une colonne de valeurs.
Voici ce que j'essayais de faire avec.
DataRow[] dupresults = dt.Select("PROV_NEW");
TableIssues = string.Empty;
DataTable dtTemp = dt.DefaultView.ToTable(true, "NEW_PROV");
if (dupresults.Length == 0)
{
return true;
}
else
{
foreach (DataRow item in dupresults)
{
Console.WriteLine(item[1]);
TableIssues += "Provider Code is not unique for " + item[1].ToString() + ". Revise non-unique codes.\r\n\n\n\n";
}
return false;
}
Bien, mais je suis aussi de l'avoir afin de s'assurer qu'il n'existe pas de champs vides dans PROV_NEW trop. donc je ne sais pas où mettre ça. Je suis très novice en c#. Je viens de commencé la semaine dernière. Je suis en train de faire des projets côté de l'entreprise de mon père.
private bool ValidateTable(DataSets.Setup.SETUP_MWPROVDataTable dt, out string TableIssues)
{
try
{
//NewCode not used for other row
DataRow[] result = dt.Select("PROV_NEW = ''");
DataRow[] dupresults = dt.Select("PROV_NEW");
TableIssues = string.Empty;
DataTable dtTemp = dt.DefaultView.ToTable(true, "NEW_PROV");
if (dupresults.Length == 0)
{
return true;
}
else
{
var duplicates = dt.AsEnumerable()
.Select(dr => dr.Field<string>("PROV_NEW"))
.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(g => g.Key)
.ToList();
foreach (DataRow item in dupresults)
{
Console.WriteLine(item[1]);
TableIssues += "Provider Code is not unique for " + item[1].ToString() + ". Revise non-unique codes.\r\n\n\n\n";
}
return false;
}
if (result.Length == 0)
{
//TODO: Add Next Step for validation
return true;
}
else
{
foreach (DataRow item in result)
{
Console.WriteLine(item[1]);
TableIssues += "Provider code " + item[1].ToString() + " is blank. Add new Provider code for " + item[1].ToString() +".\r\n\n\n";
}
return false;
}
}
catch (Exception)
{
throw;
}
}
}
Merci de ne pas concaténer des chaînes de caractères dans une boucle. Utiliser un
Ce qui ne fonctionne pas? Êtes-vous une erreur?
Je reçois un message d'erreur qui dit: "expression de Filtre 'PROV_NEW" ne pas correspondre à une valeur Booléenne terme." Donc, je ne sais pas vraiment ce qui s'y passe
StringBuilder
. C'est peut-être pas indispensable pour ce premier projet, mais c'est une bonne habitude à prendre.Ce qui ne fonctionne pas? Êtes-vous une erreur?
Je reçois un message d'erreur qui dit: "expression de Filtre 'PROV_NEW" ne pas correspondre à une valeur Booléenne terme." Donc, je ne sais pas vraiment ce qui s'y passe
OriginalL'auteur Kobrien | 2012-05-29
Vous devez vous connecter pour publier un commentaire.
LINQ peut vous aider ici:
Sinon:
(Ceci fonctionne parce que
HashSet<T>.Ajouter
retourne false si la valeur existe déjà dans le jeu.)quel serait le HashSet mise en œuvre si j'avais composite-clé pour la comparer à la place ? Votre exemple montre d'une seule Touche "PROV_NEW"
Je serais probablement utiliser un type anonyme - anonymous types de déjà mettre en œuvre l'égalité de manière appropriée, à l'aide de la valeur par défaut comparaison d'égalité pour chaque composant.
Je ne suis pas sûr de ce que tu veux dire, j'en ai peur. Vous pourriez envisager de poser une nouvelle question.
Comme je l'ai dit, vous devez poser une nouvelle question.
OriginalL'auteur Jon Skeet
Prendre Jon Skeet du des conseils sur l'utilisation anonyme de type LINQ sur PLUSIEURS de SÉLECTION de COLONNE, j'ai eu moi-même une solution, j'Espère qu'elle vous aide aussi:
OriginalL'auteur LetsKickSomeAss in .net
dtEmp
est votre travail datatableOriginalL'auteur Sajishanoop