製品の評価の平均を計算するLINQ to Entitiesを使用してクエリを作成しようとしています。評価を注文する前に、各製品の平均を匿名オブジェクトに投影します。私はその後、結果の一部だけを取りたいと思っています。Skip and Takeを使用して平均を計算することはできますか?
クエリは以下の通りです:
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();
次のようになり、生成されるクエリ:クエリは任意の項目をスキップする動作しない、またはほんの数を取るために
{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]}
を結果。むしろ、データベース内のすべての製品の平均の計算を返します。
私がしようとしているようにSkip
とTake
を利用することはできますか?もしそうなら、希望の結果を得るためにクエリを修正するには?私はデータベースからすべてのデータを取り戻さないことが望ましいです。
クエリは、それが書かれているように動作しなければなりません。どのEFバージョンを使用していますか? –
@IvanStoev EF 6.1.3。 –
それはそれが私のために働く。 –