Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取日期间最畅销的前10种产品_C#_.net_Linq - Fatal编程技术网

C# 获取日期间最畅销的前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中的产品

我想在用户指定的日期内返回前10名最畅销的产品(最多数量)

数据库中的我的表:

订单

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

我相信这会退回单次订单中销售最多的产品,但不会退回整个日期范围内的产品。