3

ユーザーが指定した日付で最も売れた (数量が多い) トップ 10 製品を返品したいと考えています。

データベースからの私のテーブル:

注文

OrderId | OrderDate

Order_Products :

ProductID | OrderID | Quantity

製品

ProductID | ProductName | ProductDescription

コード:

return (from product in this.Entities.Products
        from orderProduct in this.Entities.Order_Product 
        from order in this.Entities.Orders
        where order.OrderId = orderProduct.ProductID && orderProduct.ProductID == product.ProductID
        where (order.OrderDate >= date1 &&  <= date2)
        select product).OrderByAscending(COUNT(Quantity)).Distinct().Take(10);

今までのコード。

4

2 に答える 2

1

これを行うには2つの方法が考えられます

これにより、各製品のサブクエリが実行され、日付範囲内で販売された数量が合計されます。これは私には最も明確に思えますが、うまく機能しない可能性があります

  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 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);
于 2013-01-12T01:34:46.297 に答える
0
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, op.Quantity } into pq
    group pq by pq.Product.ProductID into g
    select g.OrderByDescending(x => x.Quantity).First().Product).Take(10);
于 2013-01-12T00:53:45.203 に答える