我正在尝试编写一个LINQ查询,以使用Northwind数据库根据产品类别查找每个员工的总销售额。
所需结果应为:
EmployeeID:ProductCategoryID:totalNumberofSales
例如:
1stEmployee:第一类:x销售 。 。
nthEmployee:nthCategory: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 { }
答案 0 :(得分:0)
您的罗斯文(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();
由于四舍五入等问题,折扣使它更加复杂,但是您可以使用提供了ExtendedPrice列的OrderDetailsExtended视图,但是这意味着您需要执行显式联接而不是导航属性,例如
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();