SQL からデータテーブルに日時フィールドを読み取るときに、次の問題があります。
クエリは正常に動作しますが、foreach ループに到達すると、日時フィールドの null 値について不平を言います。
次のように定義されたクラスがあります。
public class trading_book_product_IRS
{
public DataTable dt_IRS { get; set; }
public string account_deal_position_id { get; set; }
public DateTime schedule_start_date { get; set; }
public DateTime schedule_end_date { get; set; }
public string repricing_type { get; set; }
public string coupon_type { get; set; }
public string reference_curve { get; set; }
public string reference_curve_point { get; set; }
public decimal interest_rate { get; set; }
public decimal interest_rate_spread { get; set; }
}
以下を使用してデータテーブルを作成します。この方法で行うため、使用できませんDateTime
か?
public static DataTable CreateDataTable(Type animaltype)
{
DataTable return_Datatable = new DataTable();
foreach (PropertyInfo info in animaltype.GetProperties())
{
if (!info.Name.StartsWith("dt_"))
{
return_Datatable.Columns.Add(new DataColumn(info.Name, info.PropertyType));
}
}
return return_Datatable;
}
次に、クエリを実行して結果を書き込むことを期待していますが、DateTime が null であることを処理できません。私がやろうとしているのは、datetime が null の場合、日付を 99990101 にすることです。問題は、schedule_end_date および schedule_start_date フィールドにあります。
var query =
from result in t_sdi_trading_book_product_interest_repricing_schedule_hsbc.AsEnumerable()
where result.sdi_control_id == sdi_id
&& accountDealIDs.Contains(result.account_deal_position_id)
select new trading_book_product_IRS()
{
account_deal_position_id = result.account_deal_position_id,
coupon_type = result.coupon_type,
interest_rate = result.interest_rate,
interest_rate_spread = result.interest_rate_spread,
reference_curve = result.reference_curve,
reference_curve_point = result.reference_curve_point,
repricing_type = result.repricing_type,
schedule_end_date = !string.IsNullOrEmpty(result.schedule_end_date.ToString()) ? result.schedule_end_date : DateTime.Parse("99990101"),
schedule_start_date = !string.IsNullOrEmpty(result.schedule_start_date.ToString()) ? result.schedule_start_date : DateTime.Parse("99990101"),
};
foreach (var results in query)
{
foreach (PropertyInfo result in results.GetType().GetProperties())
{
string name = result.Name;
foreach (PropertyInfo info in used.GetType().GetProperties())
{
if ((result.Name == info.Name) && (!result.Name.StartsWith("dt_")))
{
try
{
info.SetValue(used, result.GetValue(results, null), null);
}
catch (NoNullAllowedException e)
{
}
}
}
}
dt_IRS.Rows.Add(makeRow(used, dt_IRS));
}