J'essaie de créer une requête utilisant LINQ to Entities qui calcule la moyenne d'une évaluation pour un produit. Je projette la moyenne pour chaque produit dans un objet anonyme, avant de classer les évaluations. Je veux ensuite prendre seulement une partie des résultats.
La requête est ci-dessous :
var query = Items.GroupBy(review => review.Product)
.Select(group => new
{
Product = group.Key,
Rating = group.Average(review => review.Rating)
})
.OrderByDescending(pr => pr.Rating)
.Skip(itemsToSkip)
.Take(count)
.ToList();
La requête qui est générée ressemble à ce qui suit :
{SELECT
1 AS [C1],
[GroupBy1].[K1] AS [ProductId],
[GroupBy1].[K2] AS [TotalImages],
[GroupBy1].[K3] AS [TotalVideos],
[GroupBy1].[K4] AS [TotalAudioRecordings],
[GroupBy1].[K5] AS [Name],
[GroupBy1].[K6] AS [DiscountedPrice],
[GroupBy1].[K7] AS [Status],
[GroupBy1].[A1] AS [C2]
FROM ( SELECT
[Extent2].[ProductId] AS [K1],
[Extent2].[TotalImages] AS [K2],
[Extent2].[TotalVideos] AS [K3],
[Extent2].[TotalAudioRecordings] AS [K4],
[Extent2].[Name] AS [K5],
[Extent2].[DiscountedPrice] AS [K6],
[Extent2].[Status] AS [K7],
AVG([Extent1].[Rating]) AS [A1]
FROM [dbo].[ProductReviews] AS [Extent1]
LEFT OUTER JOIN [dbo].[Products] AS [Extent2] ON [Extent1].[Product_ProductId] = [Extent2].[ProductId]
GROUP BY [Extent2].[ProductId], [Extent2].[TotalImages], [Extent2].[TotalVideos], [Extent2].[TotalAudioRecordings], [Extent2].[Name], [Extent2].[DiscountedPrice], [Extent2].[Status]
) AS [GroupBy1]}
La requête ne fonctionne pas pour sauter des éléments, ou pour ne prendre que quelques résultats. Elle renvoie plutôt un calcul de la moyenne pour chaque produit de la base de données.
Est-il possible d'utiliser Skip
y Take
comme je tente de le faire ? Si oui, comment puis-je corriger la requête pour obtenir le résultat souhaité ? Il est souhaitable que je ne récupère pas toutes les données de la base de données.