Comment fusionner deux colonnes dans un DataSet?
Auparavant, j'ai demandé à propos de l'insertion d'une colonne dans un dataset. J'ai maintenant une question similaire...à savoir la fusion de deux ou plusieurs colonnes dans une colonne unique.
Permet de dire que j'ai les données suivantes:
DataSet ds = new DataSet();
ds.Tables.Add(new DataTable());
ds.Tables[0].Columns.Add("id", typeof(int));
ds.Tables[0].Columns.Add("firstname", typeof(string));
ds.Tables[0].Columns.Add("lastname", typeof(string));
Je suis à devoir combiner le "prénom" et "nom" colonnes en une seule colonne, appelée "nom".
Serait-il préférable pour moi de créer une méthode qui permet de fusionner deux colonnes ou plus général qui peut être utilisé pour fusionner plusieurs colonnes?
Mon idée est de créer une méthode généralisée en quelque sorte le suivant:
MergeColumns(format de la chaîne, chaîne mergedColumn, DataTable dt, params string[] columnsToMerge)
L'utilisateur fournit un format comme suit: "{0} {1}"
mergedColumn est le nom de la nouvelle colonne...mais il faut être capable d'être la même que l'une des colonnes qui seront fusionnés cause dans mon monde réel cas, je suis la fusion de "nom" et "given_names" dans "nom"...mais je veux toujours être en mesure de l'utiliser si jamais j'ai besoin de fusionner "rue", "ville", "etat", "code postal" etc ... dans une colonne appelée "adresse".
La façon dont je pense, ce serait utilisée est la suivante:
MergeColumns("{0} {1}", "nom", dataTable, "prénom", "nom");
étant donné les données présentées ci-dessus, j'attendrais la résultante de l'ensemble de données présente comme suit:
DataSet ds = new DataSet();
ds.Tables.Add(new DataTable());
ds.Tables[0].Columns.Add("id", typeof(int));
ds.Tables[0].Columns.Add("name", typeof(string));
Cela vous semble comme une approche raisonnable? Ne une méthode comme cela existe déjà? Je ne veux pas réinventer la roue. Aussi, suis-je créer une méthode qui ne sont plus que j'ai réellement besoin en ce moment?
Vous devez vous connecter pour publier un commentaire.
il me semble que cela doit se faire dans la couche de données et non pas la logique de la couche. sans doute le jeu de données consommateur sait ce que les données dont il a besoin et peut en faire la demande à la banque de données de manière explicite, sans avoir à manipuler des ensembles de données.
dans un scénario de base de données, je suis essentiellement proponing un multiple de la procédure stockée approche et le jeu de données de consommation permettrait de récupérer les données à partir de la.
Si le jeu de données est assez spécifique, un MergeName() la méthode est très bien. Cela est particulièrement vrai si vous ne pensez pas que vous allez l'utiliser plus d'une fois place des. Une méthode générique exigera beaucoup plus de travail, mais pourrait être utile si vous faites beaucoup de la fusion.
Certaines choses que je peux penser à du haut de ma tête que vous aurez à faire face à:
RemoveOldColumns
drapeau peut être une bonne idée.sinon, vous pouvez faire ceci:
C'était Exactement mon exigence et après beaucoup de recherche j'ai fini par décider qu'il est préférable de créer votre propre datatable et de l'utiliser comme source de données dans la zone de liste ou DropDownList selon ce qui est nécessaire.
Ici
ds
est le jeu de données contenant la principale table de retour de la procédure.Méthode d'Extension Avec une sélection de séparateur et position,
Utilisation