使用 Linq 获取前 x 个产品



我需要使用 Linq to Entities 获取前 10 条记录。

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

Product Name  |   Product Description  |   Number of Items Sold
Item 1        |   Item 1 Description   |           24
如上所述,物品

需要按顺序存储,从售出最多的物品开始。

我已经尝试了几个示例,例如这个,这个,并遵循了这里的示例。

以下是我到目前为止尝试过的:

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);
}

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

有什么想法吗?

我认为您必须更改最后一个选择select pg.Key才能选择所需的内容

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

您正在获取整个产品表,因为您选择了pg.Key其中pg是一个IGrouping,其中Product作为键,您的匿名类型作为IElement

因此,您可以重构最终选择以执行以下操作:

//rest of Linq query...
select new 
{ 
    pg.Key.Name, 
    pg.Key.Description,
    totalQuantity
})Take(10);

相关内容

  • 没有找到相关文章

最新更新