假设我有 3 个模型:
Account;
Expense;
Profit;
费用和利润模型链接到具有 FK Acount_Id 的帐户。
现在我想要一个 View ,在其中显示每个帐户的 HTML 表及其自己的变动(利润和费用数据表中的行)。我希望它们按插入的日期排序,这是利润和费用表的一个字段。
如何在 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 模型)。
假设您现有的类(class)是:
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},
};
然后,我们按帐号/Id
形成利润
和费用
组
// 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/