我需要使用 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);