2017-07-17 2 views
0

Je charge des données à partir de la base de données et remplit le jeu de données avec des enregistrements détaillés avec la colonne studentId dupliquée dans de nombreux enregistrements. Utilisation également du code suivant pour obtenir des lignes de données distinctes à partir de l'ensemble de données:C# LINQ obtenir des datarows uniques à partir de l'ensemble de données seulement deux colonnes

tbl=tbl.AsEnumerable() 
.GroupBy(row => row.Field<int>("studentId")) 
.Select(group =>group.First()) 
.CopyToDataTable(); 

Ceci retourne toutes les colonnes dans les lignes de données uniques. Ma question, comment sélectionner uniquement des colonnes particulières? dire studentId, studentName, date de naissance?

+0

Vous pouvez essayer '.Choisir (groupe => new {group.First(). StudentID, group.First(). StudentName, group.First().} Date de naissance)' –

+0

Vous ne pouvez pas copier un seul colonne à partir d'une donnée, puis utilisez CopyToDataTable(). La table de sortie et la table d'entrée doivent avoir le même schéma. Vous pouvez donc avoir group.First() [nom de la colonne ou index]. – jdweng

Répondre

0
tbl=tbl.AsEnumerable() 
    .GroupBy(row => row.Field<int>("studentId")) 
    .Select(group =>group.First()) 

    .Select(s=> new { 
    s.studentId, 
    s.studentName, 
    s.birthdate 
    }) 
    .CopyToDataTable() 
+0

veuillez taper la déclaration complète s'il vous plaît –

+0

studentId, studentName et date de naissance sont inconnus –

+0

Je n'ai aucune idée de ce que votre structure de données est, cette partie que vous devez travailler. Ce que je vous ai donné est le concept. Quelles options obtenez-vous dans votre popup intellisense ... quand vous tapez s. –

0

Vous devez utiliser select comme ceci:

tbl = tbl.AsEnumerable() 
       .GroupBy(row => row.Field<int>("studentId")) 
       .Select(group => new { 
        studentId = group.FirstOrDefault().studentId, 
        studentName = group.FirstOrDefault().studentName, 
        birthdate = group.FirstOrDefault().birthdate 
       }) 
       .CopyToDataTable(); 
+0

Si 'FirstOrDefault()' est appelé lorsqu'il n'y a aucun élément, il renverra null, et votre code lancera une exception NullReferenceException. –

+0

@KeyurPATEL Je ne pense pas que cela ne donnera aucun résultat. –

+0

Ah, en effet vous avez raison, j'ai échoué à voir que GroupBy ne retournera jamais un ensemble vide, car il ne regrouperait pas ceux-ci en premier lieu. J'ai seulement regardé 'FirstOrDefault()'. Mon mauvais :) –

0

S'il vous plaît essayer ci-dessous le code, je ne l'ai pas essayé de rédacteur en chef.

tbl=tbl.AsEnumerable() 
.GroupBy(row => row.Field<int>("studentId")) 
.Select(new {id = row.Field<int>("studentId"),name = 
row.Field<int> 
("studentName")}). Distinct() 
.CopyToDataTable();