Напишите запрос LINQ для общего объема продаж каждого продавца в соответствии с категорией продукта.

Я пытаюсь написать запрос LINQ, чтобы найти общее количество продаж, сделанных каждым сотрудником, в соответствии с категориями продуктов с использованием базы данных Northwind.

Требуемый результат должен быть таким:

ID сотрудника : ProductCategoryID : totalNumberofSales

Например:

1-й Сотрудник: 1-я категория: х продаж. . .

nthEmployee : nthCategory : y продажи

Таблицы из базы данных NorthWind: EMPLOYEES, ORDERS, ORDER_DETAILS, PRODUCTS, CATEGORIES.

Я пробовал это, но застрял в конце.

    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 {  }

person Bega    schedule 23.10.2020    source источник


Ответы (1)


Ваша база данных 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();

Скидка делает его более сложным из-за проблем с округлением и т. д., но вы можете использовать представление OrderDetailsExtended, которое предоставляет столбец 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();
person sgmoore    schedule 24.10.2020
comment
Да, сэр, я использую турецкую версию Northwind, поэтому у меня есть personelID, я забыл его изменить. Ваш ответ действительно помог мне. Спасибо за руководство. - person Bega; 25.10.2020