9
votes

Utilisation de LINQ pour sélectionner une valeur maximale dans un groupe

Oh, je trouve juste que l'erreur est causée par une autre partie du code. Cas fermé. Strong>

J'ai 2 tables p>

1- userinfo p> xxx pré>

2- Score P>

from s in Scores
join i in UserInfos
on s.uid equals i.uid
group uscore by new { s.uid, i.name} into g
let maxScore = g.Max(p => p.score)
select new ScoreUser
{
uid = g.Key.uid,
name = g.Key.name,
score = maxScore
 }


2 commentaires

Qu'est-ce qui est retourné? Avez-vous une erreur?


Ne devriez-vous pas changer les scores et les tables userinfos? "De I dans userinfos rejoignez S dans les scores ..." Fondamentalement, votre sélection principale est de 7 enregistrements.


3 Réponses :


12
votes

Vous êtes également groupé par score quand il devrait être l'agrégateur. Essayez ceci: xxx

(mise à jour)

Je vois que vous avez trouvé le problème. Cependant, je vous laisse ici un test sur cette requête: xxx

impressions: xxx


0 commentaires

4
votes

Pour la saveur de quelqu'un, fournissez ici deux linq à l'aide d'expressions Lambda pour sélectionner une valeur maximale dans un groupe

Linq à l'aide de Lambda Expressions P>

var qry = Scores.Join(UserInfos, s => s.uid, i => i.uid, (s, i) => new { s, i })
         .GroupBy(g => new { g.s.uid, g.i.name })
         .Select(g => new { su = g.OrderBy(i => i.s.score) })
         .Select(x => x.su.LastOrDefault()).ToList();


0 commentaires

1
votes
var list = records.GroupBy(p => p.Year, (key, g) => g.OrderByDescending(y => y.Month).First()).ToList();
Above query will return a list that includes the highest month item by grouping the years.

1 commentaires

Très impressionnant. C'est évidemment la meilleure réponse, depuis sa concision. Cela m'a beaucoup aidé.