Я пытаюсь создать таблицу, подобную приведенной ниже, с заказами, сгруппированными по месяцам, и соответствующие категории, в которые попадают заказы, соответственно подсчитываются
Я также смог либо сортируйте по месяцам / годам и получайте общий итог, либо сортируйте по категориям и получайте итоговые суммы для этой категории, но не можете понять, как их объединить.
это создает действие, разрешающее группу месяца
public async Task<IActionResult> ExpensesPaymentList()
{
var model = _context.Requests.Include(r => r.Product)
.ThenInclude(r => r.ProductSubcategory)
.ThenInclude(r => r.ParentCategory)
.GroupBy(r => new
{
Month = r.ParentRequest.OrderDate.Month,
Year = r.ParentRequest.OrderDate.Year,
})
.Select(g => new MonthlyTotalsViewModel
{
Month = g.Key.Month,
Year = g.Key.Year,
GrandTotal = g.Sum(r => r.Cost)
})
.OrderByDescending(a => a.Year)
.ThenByDescending(a => a.Month)
.ToList();
return View(await model.ToListAsync());
}
это создает действие, допускающее для группы категорий
public ActionResult ExpensesPaymentList()
{
var model = _context.Requests.Include(r => r.Product)
.ThenInclude(r => r.ProductSubcategory)
.ThenInclude(r => r.ParentCategory)
.AsEnumerable()
.GroupBy(r => new
{
ParentCategory = r.Product.ProductSubcategory.ParentCategory,
})
.Select(g => new ExpensesPaymentListViewModel
{
ParentCategory = g.Key.ParentCategory,
Total = g.Sum(r => r.Cost)
})
.ToList();
return View(model);
}
Мои viewModels:
public class ExpensesPaymentListViewModel
{
public ParentCategory ParentCategory { get; set; }
public double Total { get; set; }
}
public class MonthlyTotalsViewModel
{
public int Month { get; set; }
public int Year { get; set; }
public double GrandTotal { get; set; }
}
Я открыт для любых предложений или попробовать что-то совершенно новое - я был застрял на этом в течение нескольких дней. спасибо!
edit: Я также пытался использовать где в select и жестко кодировать различные категории и привязывать их к viewModel, но Linq говорит, что это недопустимый запрос. Смотри ниже
public async Task<IActionResult> ExpensesPaymentList()
{
var model = _context.Requests.Include(r => r.Product)
.ThenInclude(r => r.ProductSubcategory)
.ThenInclude(r => r.ParentCategory)
.GroupBy(r => new
{
Month = r.ParentRequest.OrderDate.Month,
Year = r.ParentRequest.OrderDate.Year,
})
.Select(g => new MonthlyTotalsViewModel
{
Month = g.Key.Month,
Year = g.Key.Year,
PlasticsTotal = g.Where(g => g.Product.ProductSubcategory.ParentCategory.ParentCategoryID == 1).Sum(r => r.Cost),
ReagentsTotal = g.Where(g => g.Product.ProductSubcategory.ParentCategory.ParentCategoryID == 2).Sum(r => r.Cost),
//and so on for the rest of my parentcategories
GrandTotal = g.Sum(r => r.Cost)
})
.OrderByDescending(a => a.Year)
.ThenByDescending(a => a.Month)
.ToList();
return View(await model.ToListAsync());
}