У меня есть несколько репозиториев, которые содержат userId, paidDate и такие атрибуты суммы, как Bills(userId, paidDate, amount)
Shoppings(userId, paidDate, amount)
и т. Д. Я хочу получить сумму сумм, сгруппировать их по userId и получить что-то вроде {user1: {amount1, amount2, amount3 ..}, user2: {amount4, ..}}
Я создал модель CostDetails, которая содержит все вышеперечисленные репозитории.
public class ExpenseDetails
{
public IEnumerable<ApplicationUser> ApplicationUsers { get; set; }
public IEnumerable<Bill> Bills { get; set; }
public IEnumerable<Shopping> Shoppings { get; set; }
public IEnumerable<Rent> Rents { get; set; }
}
И я создал вспомогательный метод для расчета суммы сумм с циклом каждой модели в CostDetails.
public static Dictionary<string, List<double>> UsersExpense(ExpenseDetails expenseDetails)
{
Dictionary<string, List<double>> TotalCosts = new Dictionary<string, List<double>>();
List<double> Total = new List<double>();
double sum = 0;
foreach (var user in expenseDetails.ApplicationUsers)
{
foreach (var item in expenseDetails.Shoppings)
{
if (item.ApplicationUserId == user.Id)
{
if (Convert.ToInt32(item.PaidDate.Split("/")[1]) == DateTime.Now.Month)
{
sum = item.Amount + sum;
}
}
}
Total.Add(sum);
sum = 0;
foreach (var item in expenseDetails.Bills)
{
if (item.ApplicationUserId == user.Id)
{
if (Convert.ToInt32(item.PaidDate.Split("/")[1]) == DateTime.Now.Month)
{
sum = item.Amount + sum;
}
}
}
Total.Add(sum);
sum = 0;
foreach (var item in expenseDetails.Rents)
{
if (item.ApplicationUserId == user.Id)
{
if (Convert.ToInt32(item.PaidDate.Split("/")[1]) == DateTime.Now.Month)
{
sum = item.Amount + sum;
}
}
}
Total.Add(sum);
sum = 0;
TotalCosts.Add(user.Id, Total.ToList());
Total.Clear();
}
return TotalCosts;
}
Ноэто не очень хорошо для программирования. Как я могу достичь этого с лучшей практикой? Кстати, я использую шаблон хранилища.