C# 如何在linq表达式中写入前5名属性和分组依据?

C# 如何在linq表达式中写入前5名属性和分组依据?,c#,tsql,C#,Tsql,我想找出5个最好的公司名称,使公司利润最大。 以下是我到目前为止所写的内容: var result = from c in db.Customers join o in db.Orders on c.CustomerID equals o.CustomerID join od in db.Order_Details on o.OrderID equals od.OrderID

我想找出5个最好的公司名称,使公司利润最大。 以下是我到目前为止所写的内容:

var result = from c in db.Customers
             join o in db.Orders
             on c.CustomerID equals o.CustomerID
             join od in db.Order_Details
             on o.OrderID equals od.OrderID
             select new
             {
                 CompanyName = c.CompanyName,
                 Profit = (float)od.UnitPrice * (float)od.Quantity * (1 - od.Discount)
             };
然而,它不包含我实际上正在寻找的group by和最好的5个company部分。我试着去做

group c by c.CompanyName into CompanyName

但它不起作用,我也找不到前五名的公司查询。

我认为您需要将结果与公司名称进行分组,并将利润相加,然后按desc的顺序取最高的五名,然后再取

类似下面的内容(尽管句子可能不完全正确)

var totalCompanies=db.Order\u Details.GroupBy(x=>x.Order.Customer.CompanyName).OrderByDescending(x=>x.Sum(y=>(float)y.Quantity*(float)y.UnitPrice*1-(y.Discount)).Take(5.ToList();
列出最佳公司=新列表();
foreach(TotalCompanys中的var项目)
{
bestcompanys.Add(item.Key);
};

下面是这个问题的类似解决方案。

前五名是和
OrderBy
,然后是
Take(5)
。这是哪个数据访问库?实体框架?请使用标签指明它是哪一个版本。
var grouped =from p in query 
            group p by p.CompanyName into g
            select new
            {
              CompanyName = g.Key,
              TotalProfit = g.sum(x=>x.Profit)
            };

var Top5=grouped.orderbyDesc(x=>TotalProfit).take(5);
       var totalCompanies = db.Order_Details.GroupBy(x => x.Order.Customer.CompanyName).OrderByDescending(x=>x.Sum(y=> (float)y.Quantity * (float)y.UnitPrice * 1 - (y.Discount))).Take(5).ToList();

        List<string> bestCompanies = new List<string>();
        foreach (var item in totalCompanies)
        {
            bestCompanies.Add(item.Key);
        };