2013-09-24 5 views
-1

J'ai une liste de type MyclassComment obtenir des enregistrements distincts dans une liste

List<Myclass> liSubjectIdDetail = new List<Myclass>(); 

où Myclass ressemble

public class Myclass 
{ 
    public Nullable<decimal> SubjectId { get; set; } 
    public string SubjectName { get; set; } 
} 

J'ajoute des enregistrements dans liSubjectIdDetail d'une table

foreach (decimal Id in VarCEMSIdDetail) 
{ 
    liSubjectIdDetail.AddRange(db.Stt.MyTable.Where(x => x.Id == Id).Select(x => new Myclass { SubjectId = x.SubjectId, SubjectName = x.SubjectName }).ToList()); 
} 

où Id contient une liste de certains ID sur la base de quels enregistrements je récupère.

Maintenant, je ne veux obtenir que des enregistrements distincts dans cette liste.

Je l'ai essayé avec Hashtable à la place de Liste
et j'ai aussi essayé

liSubjectIdDetail= liSubjectIdDetail.Distinct().ToList(); 

mais cela aussi, ne fonctionne pas. S'il vous plaît, donnez-moi une meilleure solution.
Merci à l'avance

Répondre

1

Essayez cette méthode d'extension

public static class IEnumerableExtensions { 
    public static IEnumerable<TSource> DistinctBy<TSource, TKey> 
       (this IEnumerable<TSource> source, Func<TSource, TKey> keySelector) 
    { 
     var seenKeys = new HashSet<TKey>(); 
     foreach (TSource element in source) 
     { 
      if (seenKeys.Add(keySelector(element))) 
      { 
       yield return element; 
      } 
     } 
    } 
} 

Utilisation:

liSubjectIdDetail= liSubjectIdDetail.DistinctBy(s => s.SubjectName).ToList(); 
+0

je suis nouveau dans la programmation pouvez vous s'il vous plaît me dire où je dois utiliser l'extension au-dessus –

+0

créer une classe fichier comme ci-dessus (j'ai ajouté la classe def) et essayer l'utilisation. –

Questions connexes