2012-02-01 3 views
1

J'ai une liste (mainlist) avec les éléments suivantsLINQ obtenir la première valeur dans la liste donnée

PsID Nominprsn 
---- --------- 
1  James 
2  Troy 
2  William 
3  Mike 
4  Jason 
4  Hendry 

je dois obtenir le premier nom d'une donnée PsID de sorte que le résultat serait en tant que telle

PsID Nominprsn 
---- --------- 
1  James 
2  Troy 
3  Mike 
4  Jason 

J'ai essayé ce qui suit, mais n'a pas réussi car je ne savais pas comment la première PsID:

var proglis = (from ts in mainlist 
       group ts by new { ts.PsID, Nominprsn} into grp 
       select new {grp.Key.PsID grp.Key.Nominprsn}).ToList(); 
+0

En quoi est-ce différent de [votre question ici] (http://stackoverflow.com/questions/9088608/linq-join-1-to-many-get-first-record)? –

Répondre

2

Pour sélectionner le premier élément de chaque utilisation du groupe cette requête:

var query = mainlist.GroupBy(o => o.PsID) 
        .Select(g => new { PsID = g.Key, g.First().Nominprsn }) 
        .ToList(); 

Cela retournera les mêmes résultats que vous avez montrés dans votre question. Le résultat sera un IEnumerable de types anonymes avec des propriétés nommées PsID et Nominprsn.

1

Voici comment vous devriez le faire:

var proglis = (from ts in mainlist 
       group ts by ts.PsID into grp 
       select new 
       { 
       Id = grp.Key, 
       Name = grp.First().Nominprsn 
       }).ToList(); 
+0

Si vous utilisez 'FirstOrDefault' comme ça, vous obtiendrez une exception NullReferenceException s'il n'y a aucun élément dans la liste. – Ray

+0

@Ray Comme c'est un groupe, il y a toujours des éléments dans le groupe, sinon le groupe n'existerait pas. Si la liste principale est vide, elle ne donnera pas NullReferenceException, car il n'y aura pas de groupes. Je l'ai essayé et ça marche bien. Pouvez-vous me donner un exemple où il lance NullReferenceException? –

+1

Je parlais du cas général de 'FirstOrDefault(). Member'. Dans votre cas, vous devriez juste utiliser 'First()'. – Ray

0

Ou peut-être essayer Distinct ou DistinctBy (o => o.Key.PsID)

Questions connexes