gpt4 book ai didi

c# - Razor View MVC c# 中 2 个后代模型的 Foreach 循环

转载 作者:行者123 更新时间:2023-11-30 23:26:15 25 4
gpt4 key购买 nike

假设我有 3 个模型:

Account;
Expense;
Profit;

ExpenseProfit 模型链接到具有 FK Acoount_Id 的Account

现在我想要一个 View ,在其中显示每个帐户的 HTML 表格以及它们自己的变动(Profit 和 Expense 数据表中的行)。我希望它们按插入的日期排序,这是利润表和费用表的一个字段。

如何在 View 中实现 Foreach?

类似这样的逻辑:

Foreach (var item in ( (AccountModel.Profit join AccountModel.Expense).orderedByDate Desc) {
... Do stuff...
}

账户模型:

namespace dBudget.Models
{
using System;
using System.Collections.Generic;

public partial class Account
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Account()
{
this.Expenses = new HashSet<Expense>();
this.Profits = new HashSet<Profit>();
this.UserAccounts = new HashSet<UserAccount>();
}

public int Id { get; set; }
public string Name { get; set; }
public int User_Id { get; set; }
public System.DateTime DateCreated { get; set; }
public bool Active { get; set; }

[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Expense> Expenses { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Profit> Profits { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<UserAccount> UserAccounts { get; set; }
}
}

费用模型:

namespace dBudget.Models
{
using System;
using System.Collections.Generic;

public partial class Expense
{
public int Id { get; set; }
public double Value { get; set; }
public string Description { get; set; }
public System.DateTime Date { get; set; }
public Nullable<int> Loan_Id { get; set; }
public int User_Id { get; set; }
public int Account_Id { get; set; }
public System.DateTime DateCreated { get; set; }

public virtual Account Account { get; set; }
public virtual Loan Loan { get; set; }
public virtual User User { get; set; }
}
}

盈利模式:

namespace dBudget.Models
{
using System;
using System.Collections.Generic;

public partial class Profit
{
public int Id { get; set; }
public double Value { get; set; }
public string Description { get; set; }
public System.DateTime Date { get; set; }
public Nullable<int> Loan_Id { get; set; }
public int User_Id { get; set; }
public int Account_Id { get; set; }
public System.DateTime DateCreated { get; set; }

public virtual Account Account { get; set; }
public virtual Loan Loan { get; set; }
public virtual User User { get; set; }
}
}

最佳答案

从评论中,您希望与帐户相关的所有费用和利润都集中在一个地方(模型/ View 模型)。

假设您现有的类是:

public class Account
{
public int Id { get; set; } // or account number

// your rest of the properties
public decimal AmountBalance { get; set; }

}


public class Expense
{
public int Id { get; set; }
public int AccountId { get; set; } // Foreign key
public string Details { get; set; }
public decimal Amount { get; set; }
}

public class Profit
{
public int Id { get; set; }
public int AccountId { get; set; } // Foreign key
public string Details { get; set; }
public decimal Amount { get; set; }
}

我们为模型添加一个类:

// Your view model
public class AccountModel
{
public Account Account { get; set; }
public List<Profit> Profits { get; set; }
public List<Expense> Expenses { get; set; }
}

现在一些虚拟数据来填充现有的类:

var accounts = new List<Account>
{
new Account {Id = 1, AmountBalance = 110},
new Account {Id = 2, AmountBalance = 120},
};

var expenses = new List<Expense>
{
new Expense {Id = 1, AccountId = 1, Amount = 10},
new Expense {Id = 2, AccountId = 1, Amount = 40},
new Expense {Id = 3, AccountId = 2, Amount = 50},
};

var profits = new List<Profit>
{
new Profit {Id = 1, AccountId = 1, Amount = 20},
new Profit {Id = 2, AccountId = 2, Amount = 30},
new Profit {Id = 3, AccountId = 2, Amount = 60},
};

然后我们根据帐号/IDProfitsExpenses分组

// Form groups of expenses by the account number / id. Each group will have all the expenses belonging to the same account number / id
var expenseGroupsByAccount = expenses.GroupBy(expense => expense.AccountId).ToList();

// Form groups of profits by the account number / id. Each group will have all the profits belonging to the same account number / id
var profitGroupsByAccount = profits.GroupBy(profit => profit.AccountId).ToList();

最后,我们填充模型

// Now we can populate the AccountModel, which is essentially an account and all expenses & profits associated with it. 
var accountModels = new List<AccountModel>();
foreach (Account account in accounts)
{
var accountModel = new AccountModel
{
Account = account,
Profits =
profitGroupsByAccount.Where(profitsGroup => profitsGroup.Key == account.Id)
.SelectMany(g => g)
.ToList(),
Expenses = expenseGroupsByAccount.Where(expenseGroup => expenseGroup.Key == account.Id)
.SelectMany(g => g)
.ToList()
};
accountModels.Add(accountModel);
}

关于c# - Razor View MVC c# 中 2 个后代模型的 Foreach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36934343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com