我有两个表,一个用户和一个事务。
Users Transactions
| Id | Name | | Id | TranId |UserId | Amount |
| -- | ------| | -- | ------ |------ | ------ |
| 1 | John | | 1 | 1 | 2 | -100 |
| 2 | Jane | | 2 | 1 | 1 | 100 |
我有一个表格,我想在其中显示每笔交易并显示每个用户的金额。
我可以对交易进行分组,但我似乎无法在正确的列中显示金额。
使用我当前的代码,Jane 列下显示 100,但对于任何其他用户,它只显示“N/A”
我的控制器
using (var context = new SharedExpensesEntities())
{
transactionsList = context.Transactions.ToList();
usersList = context.Users.ToList();
}
var viewModel = new TransactionListModel
{
TransactionList = transactionsList.GroupBy(x => x.TranId)
.Select(g => new Transaction
{
Id = g.LastOrDefault().Id,
TranId = g.Key,
}).ToList(),
UserList = usersList
};
foreach (var transaction in viewModel.TransactionList)
{
foreach (var user in viewModel.UserList)
{
var userTransaction = transactionsList.FirstOrDefault(t => t.UserId == user.Id && t.TranId == transaction.TranId);
if (userTransaction != null)
{
transaction.UserId = user.Id;
transaction.Amount = userTransaction.Amount;
}
}
}
我的cshtml:
<table class="table">
<tr class="table-header">
<th>
Id
</th>
<th>
TransId
</th>
@foreach (var user in Model.UserList)
{
<th>
@user.Name
</th>
}
</tr>
@foreach (var item in Model.TransactionList)
{
<tr class="user-item" data-bs-toggle="modal" data-bs-target="#editUserModal">
<th>@item.Id</th>
<th>@item.TranId</th>
@foreach (var user in Model.UserList)
{
<th>@(Model.TransactionList.FirstOrDefault(t => t.UserId == user.Id)?.Amount != null ? string.Format("{0:N2}", Model.TransactionList.FirstOrDefault(t => t.UserId == user.Id).Amount) : "N/A")</th>
}
</tr>
}
</table>
原因是您的表格中的
null
和 Amount
代表您感兴趣的一些记录。您可以使用 .Where(item => item.Amount != null)
过滤掉它们