C# 用于选择畅销书的LINQ查询
聪明人能帮我写一个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
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;
}