使用Linq获取Top x产品

时间:2014-01-03 13:37:01

标签: c# linq linq-to-entities linq-query-syntax

我需要使用Linq to Entities获得前10名记录。

我需要将返回的结果绑定到GridView,如下所示“

Product Name  |   Product Description  |   Number of Items Sold

Item 1        |   Item 1 Description   |           24

根据上述情况,需要按顺序存储物品,从销售的物品开始。

我尝试了一些示例,例如thisthis,并遵循examples here

以下是我到目前为止所尝试的内容:

public IQueryable GetTopTenProducts(DateTime startDate, DateTime endDate)
{
    return
        (from p in this.Entities.Product
         join pro in this.Entities.ProductOrder on p.ID equals pro.ProductID
         join o in this.Entities.Order on pro.OrderID equals o.ID
         where o.DateOfOrder >= startDate && o.DateOfOrder <= endDate
         select new
         {
             Product = p,
             Quantity = pro.Qty,
             ProductName = p.Name,
             ProductDescription = p.Description

         } into productQty
         group productQty by productQty.Product into pg
         let totalQuantity = pg.Sum(prod => prod.Quantity)
         orderby totalQuantity descending
         select pg.Key).Take(10);
}

这会返回整个产品表,但我只需要检索上面粘贴的详细信息。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

我认为您必须更改上一次选择select pg.Key以选择您想要的内容

例如:select new { pg.Key.ProductName, pg.Key.ProductDescription, totalQuantity }

答案 1 :(得分:1)

您正在获取整个产品表,因为您选择pg.Key其中pgIGrouping,其中Product为关键,而您的匿名类型为{{1} }}

所以,你可以重构你的最终选择来做这样的事情:

IElement