2013-07-25 6 views
1

J'ai un datatable qui ressemble à ce qui suitgroupe DataTable par séparés par des virgules

cname tname text  allowgroupping 
A  M  good  Yes 
A  M  bad   Yes 
A  M  ugly  Yes 
B  N  sick  No 
B  N  lovely  No 
C  R  pathatic Yes 

Je veux groupe datatable par la première colonne cname de sorte que le résultat ressemblera

cname tname  text     allowgroupping 
    A  M  good,bad,ugly  Yes 
    B  N  sick,lovely   No 
    C  R  pathatic    Yes 

I l'ai fait en bouclant chaque colonne et en faisant beaucoup de contrôles, mais comment puis-je le faire en utilisant LINQ et enregistrer le résultat dans un datatable?

+1

Ce poste a donc votre réponse ... http://stackoverflow.com/a/7325306/1246574 – Jim

Répondre

1

Vous pouvez faire quelque chose comme ceci:

var query = from row in dataTable.AsEnumerable() 
       group row by row["cname"] into g 
       select new { cname = g.Key, 
           tname = g.First()["tname"] , 
           text = String.Join(", ", g.Select(r=>r["text"].ToString()).ToArray()), 
           allowgrouping = g.First()["allowgroupping"] 
       }; 

    foreach (var row in query) 
    { 
     resultDataTable.Rows.Add(row.cname, row.tname, row.text, row.allowgrouping); 
    } 
1

L'idée est de regrouper la table par:

var groupedDB = 
    from entry in dataTable 
    group entry by entry.cName into entryGroup 
    select new 
    { 
    cName = entryGroup.Key, 
    tName = entryGroup.First().tName, 
    text = String.Join(",", entryGroup.Select(_=>_.text)), 
    allowGrouping = entryGroup.First().allowGrouping 
    }; 

Bien sûr, une fois que vous faites cela, vous verrez que vous faire quelques hypothèses audacieuses sur les colonnes tName et allowGrouping. Assurez-vous que vous voulez dire. Si ce n'est pas le cas, vous devez regrouper par les trois colonnes au lieu de simplement cName.

Questions connexes