2013-04-09 4 views
2

Je souhaite obtenir des enregistrements distincts en fonction de certains champs. J'utilise la méthode suivante:Enregistrements distincts dans DataTable

string[] TobeDistinct = { "PKID" }; 
DataTable dtDistinct = GetDistinctRecords(ds.Tables[0], TobeDistinct); 
DataSet ds2 = new System.Data.DataSet(); 
ds2.Tables.Add(dtDistinct); 

public static DataTable GetDistinctRecords(DataTable dt, string[] Columns) 
{ 
    DataTable dtUniqRecords = new DataTable(); 
    dtUniqRecords = dt.DefaultView.ToTable(true, Columns); 
    return dtUniqRecords; 
} 

Cela me donne les enregistrements distincts, mais seulement deux enregistrements viennent. Seulement deux PKID distincts viendront. Par exemple, j'ai plusieurs enregistrements avec PKID 10,12,14,16, mais le résultat est 2 lignes avec PKID 10 et 12. Plus de deux lignes ne sont pas là, mais devraient être là. Qu'est-ce que je dois faire?

Je suivre cet article: http://www.codeproject.com/Tips/153008/Select-DISTINCT-records-based-on-specified-fields

enter image description here

+1

Impossible de reproduire votre problème. Etes-vous sûr que vous passez la bonne table à GetDistinctRecords? – Steve

+1

duplication possible de [Comment sélectionner des lignes distinctes dans un datatable et stocker dans un tableau.] (Http://stackoverflow.com/questions/1199176/how-to-select-distinct-rows-in-a-datatable-and -store-into-an-array) – JNF

Répondre

11

Vous pouvez utiliser comme suit

DataView view = new DataView(table); 
DataTable distinctValues = view.ToTable(true, "Column1", "Column2" ...); 

Plus de détails
How to select distinct rows in a datatable and store into an array

+0

cela n'a aucun effet! le même résultat de deux lignes. Qu'est-ce que je manque monsieur? –

+0

il y aura un espace de début ou de fin entre essayer «fonction trim» tout en sélectionnant l'enregistrement de la base de données –

+0

il peut être dû à l'espace entre les deux. En fait, je n'ai pas d'enregistrement de champ vide dans pkid. –

6

Pouvez-vous essayer?

var myResult = dt.AsEnumerable().Select(c => (DataRow)c["MyColumn"]).Distinct().ToList(); 
Questions connexes