C# 获取日期间最畅销的前10种产品
我想在用户指定的日期内返回前10名最畅销的产品(最多数量) 数据库中的我的表: 订单C# 获取日期间最畅销的前10种产品,c#,.net,linq,C#,.net,Linq,我想在用户指定的日期内返回前10名最畅销的产品(最多数量) 数据库中的我的表: 订单 OrderId | OrderDate ProductID | ProductName | ProductDescription 订购产品: ProductID | OrderID | Quantity 产品 OrderId | OrderDate ProductID | ProductName | ProductDescription 代码: 返回(来自此.Entities.Products中的产品
OrderId | OrderDate
ProductID | ProductName | ProductDescription
订购产品:
ProductID | OrderID | Quantity
产品
OrderId | OrderDate
ProductID | ProductName | ProductDescription
代码:
返回(来自此.Entities.Products中的产品)
来自此.Entities.Order\u产品中的orderProduct
来自此.Entities.Orders中的order
其中order.OrderId=orderProduct.ProductID&&orderProduct.ProductID==product.ProductID
其中(order.OrderDate>=date1&var查询=
(来自实体产品中的p)
在实体中加入op.Order\U p.ProductID上的产品等于op.ProductID
在实体中加入o。op.OrderID上的订单等于o.OrderID
其中o.OrderDate>=date1&&o.OrderDate x.Quantity.First().Product.Take(10);
我可以想出两种方法来做到这一点
这会对每个产品进行子查询,以汇总日期范围内的销售数量。对我来说,这似乎是最清楚的,但可能没有那么好
var query =
(from p in Entities.Products
let totalQuantity = ( from op in Entities.Order_Product
join o in Entities.Orders on op.OrderID equals o.OrderId
where op.ProductID == p.ProductID && o.OrderDate >= date1 && o.OrderDate <= date2
select op.Quantity ).Sum()
where totalQuantity > 0
orderby totalQuantity descending
select p).Take(10);
var查询=
(来自实体产品中的p)
让totalQuantity=(来自Entities.Order\u产品中的op)
在实体中加入o。op.OrderID上的订单等于o.OrderID
其中op.ProductID==p.ProductID&&o.OrderDate>=date1&&o.OrderDate 0
按总数量递减排序
选择p),取(10);
或者作为一个查询,它获取日期范围内的所有订单,按产品对它们进行分组,并对数量求和
var query =
(from p in Entities.Products
join op in Entities.Order_Product on p.ProductID equals op.ProductID
join o in Entities.Orders on op.OrderID equals o.OrderId
where o.OrderDate >= date1 && o.OrderDate <= date2
select new { Product = p, Quantity = op.Quantity } into productQty
group productQty by productQty.Product into pg
let totalQuantity = pg.Sum(prod => prod.Quantity)
orderby totalQuantity descending
select pg.Key).Take(10);
var查询=
(来自实体产品中的p)
在实体中加入op.Order\U p.ProductID上的产品等于op.ProductID
在实体中加入o。op.OrderID上的订单等于o.OrderID
其中o.OrderDate>=date1&&o.OrderDate产品数量)
按总数量递减排序
选择pg.Key),取(10);
我相信这会退回单次订单中销售最多的产品,但不会退回整个日期范围内的产品。