asp.net-mvc - Controller 中的 Linq sum 并传递给 View ASP NET CORE 2.1
问题描述
我想问一下如何编写linq在控制器中求和并添加到表子“”的视图中
我的模型 1
public class ChartAccount
{
[Key]
public int ChartId { get; set; }
public int Kodeakun { get; set; }
public string Namaakun { get; set; }
public int Saldo { get; set; }
public virtual ICollection<Transaction> Transaksilist { get; set; }
}
模型 2
public class Transaction
{ [Key]
public int Id { get; set; }
public string NoBukti { get; set; }
public DateTime Tanggal { get; set; }
public string Deskripsi { get; set; }
[DisplayFormat(DataFormatString = "{0:C}")]
public long Debit { get; set; }
[DisplayFormat(DataFormatString = "{0:C}")]
public long Credit{ get; set; }
public int? ChartId { get; set; }
public ChartAccount Transactions { get; set; }
}
我还想用借记卡和贷记卡中的值填写表 saldo
在图表帐户视图(索引)中(我在迁移时填充初始值)
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Kodeakun)
</td>
<td>
@Html.DisplayFor(modelItem => item.Namaakun)
</td>
<td>
@Html.DisplayFor(modelItem => item.Saldo)
</td>
它像这样生成
|Kodeakun|Namaakun |Saldo|
|10000 |Asset |0 |
|20000 |Utang |0 |
|30000 |Modal |0 |
|40000 |Pendapatan|0 |
在事务视图中(索引)
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Transactions.Kodeakun)
</td>
<td>
@Html.DisplayFor(modelItem => item.Deskripsi)
</td>
<td>
@Html.DisplayFor(modelItem => item.Debit)
</td>
<td>
@Html.DisplayFor(modelItem => item.Credit)
</td>
它像这样生成
|Kodeakun|Debit |Credit |Deskripsi|
|10000 |1.000.000 |0 |Kas |
|20000 |0 |1.000.000|Utang |
我想在控制器中编写 linq。我想在图表帐户控制器中以索引或详细信息编写什么方法?
// GET: ChartAccounts
public async Task<IActionResult> Index()
{
return View(await _context.Accounts.ToListAsync());
}
// GET: ChartAccounts/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var chartAccount = await _context.Accounts
.FirstOrDefaultAsync(m => m.ChartId == id);
if (chartAccount == null)
{
return NotFound();
}
return View(chartAccount);
}
我试过了,但我有点不明白如何通过查看
我在控制器细节中尝试的代码
//public DbSet<Transaction> Transaksi { get; set; }
//public DbSet<ChartAccount> Accounts { get; set; }
var a = from s in _context.Transaksi
group s by s.Transactions.Kodeakun;
所以基本上我想如果我在事务中插入数据并保存它。我还希望它在示例中更新数据图表帐户
|Kodeakun|Debit |Credit |Deskripsi|
|10000 |1.000.000 |0 |Kas |
|20000 |0 |1.000.000|Utang |
|10000 |0 |1.000.000|Kas |
|10000 |1.000.000 |0 |Kas |
它有借方贷方。所以我的图表账户应该是这样的
|Kodeakun|Namaakun |Saldo |
|10000 |Asset |1.000.000|
|20000 |Utang |1.000.000|
|30000 |Modal |0 |
|40000 |Pendapatan|0 |
基本上借记是(+),信用是(-),所以我在借记和信用中插入了2个Kas,saldo的结果是1.000.000(2.000.000-1.000.000)
对不起我的英语不好
解决方案
您必须使用GroupBy
sum 并构造一个新对象:
data.GroupBy(el => el.Kodeakun).Select(group => new ChartAccount
{
Saldo = group.Sum(item => item.Debit) - group.Sum(item => item.Credit),
Kodeakun = group.Key,
Namaakun = // take it from appropriate field
});
推荐阅读
- shell - 仅当它们与模式匹配时才删除重复的行
- swift - 无法识别的选择器发送到实例 Firebase 身份验证
- php - PHP联系表将空字段返回到我的电子邮件
- javascript - Redis ReJSON 系统地返回我两个错误:在非终端路径缺少键和必须在根目录创建新对象
- r - r - 创建反应式过滤器,以闪亮的方式应用于上传的 csv 文件
- mysql - 选择联合不返回预期的列
- node.js - 在 node.js 中使用 bignumber.js 进行大数除法太慢
- openstack - Openstack:使每个实例的网络端口唯一 OS::Heat::ResourceGroup COUNT
- javascript - 开玩笑 - TypeError: Object(...) is not a function
- android - 在 AndroidX 工具栏上设置不确定的进度条