41 votes

Obtenez la moyenne en utilisant LINQ

En espérant que quelqu'un puisse m'aider avec la syntaxe LINQ pour calculer une moyenne. Par exemple, j'ai la requête LINQ suivante :

 var rates = from rating in ctx.Rates  
            where rating.Id == Id  
            select new 
            {   
                UserId = rating.UserId,  
                Rating = rating.Rating  
            };  

Si 10 enregistrements sont renvoyés, je dois calculer la moyenne dans le champ Note. Il est défini comme un double dans ma base de données. J'utilise LINQ to EF. J'attribuerais donc l'UserId, le MiscId et la Note serait la moyenne des enregistrements renvoyés. Je passe un objet au code client.

96voto

Adam Rackis Points 45559
double RatingAverage = ctx.Rates.Where(r => r.Id == Id).Average(r => r.Rating);

33voto

tvanfosson Points 268301

Cherchez-vous une note moyenne par identifiant d'utilisateur ? Si tel est le cas, vous devez utiliser à la fois GroupBy et Average .

 var rates = ctx.Rates
               .Where( r => r.Id == Id )
               .GroupBy( g => g.UserId, r => r.Rating )
               .Select( g => new
                {
                   UserId = g.Key,
                   Rating = g.Average()
                }); 

0voto

Ajmal Jamil Points 731

Cela pourrait également fonctionner si vous ne souhaitez pas calculer la moyenne séparément et que la note provient d'un autre tableau.

 var query = (from u in db.Users 
                     where rating.Id == Id
                     select new ViewModel
                     {
                         UserId = rating.UserId
                         Rating = (from c in db.Comments where c.fkUserId.Equals(u.Id) select c.StarRating).Average()
                     }).ToList();
        return query;

Il renverra la note moyenne. Remarque : utilisez l'évaluation comme type double annulable, c'est-à-dire double? Rating

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X