首页 > 解决方案 > 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)

对不起我的英语不好

标签: asp.net-mvclinqasp.net-core

解决方案


您必须使用GroupBysum 并构造一个新对象:

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

推荐阅读