Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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# 用于选择畅销书的LINQ查询_C#_Asp.net_Linq_Entity Framework - Fatal编程技术网

C# 用于选择畅销书的LINQ查询

C# 用于选择畅销书的LINQ查询,c#,asp.net,linq,entity-framework,C#,Asp.net,Linq,Entity Framework,聪明人能帮我写一个LINQ查询以获得最畅销的产品吗?我在模型中有以下两个表/类: (这显然行不通) 我认为你用错了。我想这就是你想要的 Orders.OrderByDescending(o => o.OrderedItems.Sum(oi => oi.Qty)) .Select(o => o.OrderedItems.Product) 然后: List<OrderedItem> orders = new List<OrderedI

聪明人能帮我写一个LINQ查询以获得最畅销的产品吗?我在模型中有以下两个表/类:

(这显然行不通)

我认为你用错了。我想这就是你想要的

Orders.OrderByDescending(o => o.OrderedItems.Sum(oi => oi.Qty))
      .Select(o => o.OrderedItems.Product)
然后:

        List<OrderedItem> orders = new List<OrderedItem>();
        var products = orders.GroupBy(p => p.Product.Id).OrderByDescending(pi => pi.Sum(pii => pii.Qty)).Select(p=>p.Key);
列表顺序=新列表();
var products=orders.GroupBy(p=>p.Product.Id)。OrderByDescending(pi=>pi.Sum(pii=>pii.Qty))。选择(p=>p.Key);

您根本不需要Orders表。假设每个订购的项目都有相应的订单,您应该能够做到这一点

var query =
    (from item in OrderedItem
    group item.Qty by item.Product into g
    orderby g.Sum() descending
    select g.Key).Take(5); // get the top 5 orders
public易读畅销书(int?count)
{
var query=(来自db.OrderDetails中的项
按项目产品将项目数量分组为g
orderby g.Sum()降序
选择g.Key)。获取(计数??20);//获取前5个订单
返回查询;
}

实际上,我的示例是错误的。。。它需要考虑到一个产品可能已经订购了不止一次。啊-杰夫的答案可能就是你需要的,那么你如何获得密钥和合计数量?然后你将同时选择密钥和合计
…选择新的{g.Key,Sum=g.Sum()}
class Product {
            public int Id { get; set; }
        }
        class OrderedItem
        {
            public Product Product { get; set; }

            public int Qty { get; set; }
        }
        List<OrderedItem> orders = new List<OrderedItem>();
        var products = orders.GroupBy(p => p.Product.Id).OrderByDescending(pi => pi.Sum(pii => pii.Qty)).Select(p=>p.Key);
var query =
    (from item in OrderedItem
    group item.Qty by item.Product into g
    orderby g.Sum() descending
    select g.Key).Take(5); // get the top 5 orders
    public IQueryable<Product> Bestsellers(int? count)
    {
        var query = (from item in db.OrderDetails
                     group item.Qty by item.Product into g
                     orderby g.Sum() descending
                     select g.Key).Take(count??20); // get the top 5 orders

        return query;
    }