Linq to sql 根据产品类别为每个销售人员的总销售额编写LINQ查询

Linq to sql 根据产品类别为每个销售人员的总销售额编写LINQ查询,linq-to-sql,ado.net,northwind,Linq To Sql,Ado.net,Northwind,我正在尝试编写一个LINQ查询,根据使用Northwind数据库的产品类别,查找每个员工的总销售额 要求的结果应如下所示: 员工ID:ProductCategoryID:totalNumberofSales 例如: 1模板用户:第一类:x销售 . . N员工:N类别:y销售 NorthWind数据库中的表包括员工、订单、订单详细信息、产品、类别 我试过了,但最后还是卡住了 List<ORDER_DETAILS> o_details = db.ORDER_DETAILS.To

我正在尝试编写一个LINQ查询,根据使用Northwind数据库的产品类别,查找每个员工的总销售额

要求的结果应如下所示:

员工ID:ProductCategoryID:totalNumberofSales

例如:

1模板用户:第一类:x销售 . .

N员工:N类别:y销售

NorthWind数据库中的表包括员工、订单、订单详细信息、产品、类别

我试过了,但最后还是卡住了

    List<ORDER_DETAILS> o_details = db.ORDER_DETAILS.ToList();
                    List<ORDERS> orders = db.ORDERS.ToList();
                    List<CATEGORIES> categories = db.CATEGORIES.ToList();
                    List<EMPLOYEES> employee = db.EMPLOYEES.ToList();
                    List<PRODUCTS> products= db.PRODUCTS.ToList();
    
                    var list= orders.GroupJoin(employee, o => o.PersonelID, e => e.PersonelID, (e, os) => new { e, os.})
.GroupJoin(o_details, tp => tp.e.OrderID, od => od.OrderID, (od, tps) => new { od, tps })
.GroupJoin(products, tp2 => tp2.od.e.ORDER_DETAILS, p => p.ORDER_DETAILS, (tp2,ps) => new{tp2, ps})
.GroupJoin(categories, tp3=>tp3.ps, c=>c.CategoryID, (tp3s,cs)=>new { tp3s, cs}).GroupBy(m => new {  }
List o_details=db.ORDER_details.ToList();
List orders=db.orders.ToList();
List categories=db.categories.ToList();
List employee=db.EMPLOYEES.ToList();
List products=db.products.ToList();
var list=orders.GroupJoin(employee,o=>o.PersonelID,e=>e.PersonelID,(e,os)=>new{e,os.})
.GroupJoin(o_详细信息,tp=>tp.e.OrderID,od=>od.OrderID,(od,tps)=>new{od,tps})
.GroupJoin(产品,tp2=>tp2.od.e.ORDER_详细信息,p=>p.ORDER_详细信息,(tp2,ps)=>new{tp2,ps})
.GroupJoin(categories,tp3=>tp3.ps,c=>c.CategoryID,(tp3s,cs)=>new{tp3s,cs}).GroupBy(m=>new{}

您的Northwind数据库可能与我的不同,因为我没有PersonelID列,但有一个EmployeeID,希望这会有所帮助

如果不是因为折扣,那么将orderDetails记录分组可能是一个简单的问题,即

 var summary = (from od in OrderDetails
 group od by new { od.Order.EmployeeID, od.Product.CategoryID } into results
 orderby results.Key.EmployeeID, results.Key.CategoryID 
 select new
 {
    results.Key.EmployeeID,
    results.Key.CategoryID,
    Sales = results.Sum(a => a.UnitPrice * a.Quantity)
 } 
 ).ToList();
由于舍入问题等,折扣使其更加复杂,但您可以使用OrderDetailsStrended视图,该视图提供ExtendedPrice列,但这意味着您需要执行显式联接,而不是导航属性,例如

 var summary2 = (from od in OrderDetailsExtended 
    join order   in Orders   on od.OrderID   equals order.OrderID
    join product in Products on od.ProductID equals product.ProductID
    group od by new { order.EmployeeID, product.CategoryID } into results
    orderby results.Key.EmployeeID, results.Key.CategoryID
    select new
    {
        results.Key.EmployeeID,
        results.Key.CategoryID,
        Sales = results.Sum(a => a.ExtendedPrice)
    }
    ).ToList();

是的,先生,我用的是土耳其语版的northwind,这就是为什么我的是personelID,我忘了更改它。你的回答真的帮助了我。谢谢你指导我。