記事詳細


投稿日
2026年08月22日07時32分
タイトル

asp.net core mvc: ModelクラスでAmount列の次の列にBalance列を作成して、Amount列のデータを計算してBalance列に値を入れるサンプルコードはありますか?

内容

はい、可能です。
ASP.NET Core MVC では、Model クラスに計算用のプロパティ(Balance列)を追加し、Amount の値を元に計算して返すようにすれば、DBに列を追加しなくてもビューで表示できます。
もし DB にも Balance 列を持たせたい場合は、マイグレーションで列を追加し、保存時に計算してセットします。

以下に Entity Framework Core を使ったサンプル を示します。

1. モデルクラス(計算列として Balance を追加)

Csharp
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace MvcSample.Models { public class Transaction { [Key] public int Id { get; set; } [Column(TypeName = "decimal(18,2)")] public decimal Amount { get; set; } // DBに保存しない計算列 [NotMapped] public decimal Balance { get; set; } } }

2. コントローラー(Amount から Balance を計算)

Csharp
using Microsoft.AspNetCore.Mvc; using MvcSample.Data; using MvcSample.Models; using System.Linq; namespace MvcSample.Controllers { public class TransactionsController : Controller { private readonly ApplicationDbContext _context; public TransactionsController(ApplicationDbContext context) { _context = context; } public IActionResult Index() { var transactions = _context.Transactions .OrderBy(t => t.Id) .ToList(); decimal runningTotal = 0; foreach (var t in transactions) { runningTotal += t.Amount; t.Balance = runningTotal; // 計算してセット } return View(transactions); } } }

3. ビュー(Index.cshtml)

Razor
@model IEnumerable<MvcSample.Models.Transaction> <table class="table"> <thead> <tr> <th>Amount</th> <th>Balance</th> </tr> </thead> <tbody> @foreach (var item in Model) { <tr> <td>@item.Amount</td> <td>@item.Balance</td> </tr> } </tbody> </table>

4. ポイント

  • [NotMapped] 属性を付けると、Balance は DB に保存されず、アプリ内で計算専用の列として使えます。
  • Index アクションで 累積計算 を行い、ビューに渡す前に Balance に値をセットしています。
  • DB に Balance 列を持たせたい場合は、[NotMapped] を外し、マイグレーションで列を追加し、保存時に計算してセットします。

もしご希望であれば、このサンプルを DBにBalance列を追加して保存するバージョン に書き換えたコードも作成できます。
そうすれば SQL 側でも直接 Balance を参照できます。

このまま計算列のままで使いますか?それとも DB に保存する形にしますか?

Powered by Froala Editor

添付画像

画像はありません
Genreのカテゴリ-名
Controllers
編集 | 記事一覧