多个存储库中属性总和的最佳做法

问题描述 投票:0回答:1

我有多个存储库,其中包含userId,paidDate和金额属性,例如Bills(userId, paidDate, amount) Shoppings(userId, paidDate, amount)等。我想获取金额的总和并按userId分组,并得到类似{user1: {amount1, amount2, amount3 ..}, user2: {amount4, ..}}的内容>

我创建了一个包含上面所有存储库的expenseDetails模型。

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

[并且我创建了一个辅助方法,用于通过使费用模型中的每个模型循环来计算金额之和。

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

但是这不是编程的好方法。我如何才能通过最佳实践实现这一目标?我正在使用存储库模式。

我有多个存储库,其中包含userId,payedDate和金额属性,例如Bills(userId,paidDate,金额)Shoppings(userId,paidDate,金额)等。我想获取金额和组的总和...

entity-framework asp.net-core repository-pattern
1个回答
0
投票
为了完成演示以实现您的要求:
© www.soinside.com 2019 - 2024. All rights reserved.