以下に ASP.NET Core MVC での典型的な手順を示します。
辞書から値を安全に取得し、Payment オブジェクトを生成して List<Payment> に追加する方法です。
完全な例
using System;
using System.Collections.Generic;
public class Payment
{
public int PaymentId { get; set; } // 自動生成される
public DateTime Posted { get; set; }
public bool InOut { get; set; }
public int? SubjectNameId { get; set; }
public string ItemName { get; set; }
public string PaymentName { get; set; }
public int? PaymentTypeId { get; set; }
public int? PaymentMethodId { get; set; }
public int? IncomeCategoryId { get; set; }
public int? IncomeTypeId { get; set; }
public decimal Amount { get; set; }
}
public class Program
{
public static void Main()
{
int thisYear = DateTime.Now.Year;
int previousMonth = DateTime.Now.Month - 1;
if (previousMonth == 0) { previousMonth = 12; thisYear--; }
// 各Idを保持する辞書(例)
var subjectNameDict = new Dictionary<string, int>
{
{ "家計", 1 },
{ "事業", 2 }
};
var paymentTypeDict = new Dictionary<string, int>
{
{ "予算", 10 },
{ "支出", 20 }
};
var paymentMethodDict = new Dictionary<string, int>
{
{ "現金", 100 },
{ "銀行振込", 200 }
};
var incomeCategoryDict = new Dictionary<string, int>
{
{ "給与", 300 },
{ "副業", 400 }
};
var incomeTypeDict = new Dictionary<string, int>
{
{ "定期", 500 },
{ "臨時", 600 }
};
// TryGetValueで安全に取得
int subjectId;
int paymentTypeId;
int paymentMethodId;
int incomeCategoryId;
int incomeTypeId;
subjectNameDict.TryGetValue("家計", out subjectId); // 見つからなければ0
paymentTypeDict.TryGetValue("予算", out paymentTypeId);
paymentMethodDict.TryGetValue("現金", out paymentMethodId);
incomeCategoryDict.TryGetValue("給与", out incomeCategoryId);
incomeTypeDict.TryGetValue("定期", out incomeTypeId);
// Paymentリスト
var payments = new List<Payment>();
// new Paymentで追加
payments.Add(new Payment
{
Posted = new DateTime(thisYear, previousMonth, 1),
InOut = true,
SubjectNameId = subjectId != 0 ? subjectId : (int?)null,
ItemName = "今月予算",
PaymentName = null,
PaymentTypeId = paymentTypeId != 0 ? paymentTypeId : (int?)null,
PaymentMethodId = paymentMethodId != 0 ? paymentMethodId : (int?)null,
IncomeCategoryId = incomeCategoryId != 0 ? incomeCategoryId : (int?)null,
IncomeTypeId = incomeTypeId != 0 ? incomeTypeId : (int?)null,
Amount = 268000
});
// 確認
foreach (var p in payments)
{
Console.WriteLine($"Posted: {p.Posted}, SubjectNameId: {p.SubjectNameId}, Amount: {p.Amount}");
}
}
}
ポイント
辞書の型
Dictionary<string, int> のようにキーを名前、値をIDにする。
TryGetValueの安全性
TryGetValue はキーが存在しない場合でも例外を出さず、out 変数にデフォルト値(intなら0)を入れる。
null許容型への変換
Payment クラスの各 Id プロパティが int?(nullable int)の場合、
辞書から取得した値が0なら null に変換してセットする。
Addの手順
payments.Add(new Payment { ... }) の中で辞書から取得した値を直接使うか、事前に変数に格納してから使う。
💡 この方法なら、辞書から安全に値を取得し、存在しない場合は null をセットできます。
もし複数の Payment を作る場合は、辞書キーを変えて同じ手順を繰り返せばOKです。
もし希望があれば、この処理を ループ化して複数のPaymentを自動生成する形 に書き換えた例も作れますが、
それも提示しますか?
そうすればコードがもっと簡潔になります。
Powered by Froala Editor