このサイトで見つけた一般的な DataTable から List への変換メソッドを使用しています。
private List<T> ConvertToList<T>(DataTable dt)
{
var columnNames = dt.Columns.Cast<DataColumn>()
.Select(c => c.ColumnName)
.ToList();
var properties = typeof(T).GetProperties();
return dt.AsEnumerable().Select(row =>
{
var objT = Activator.CreateInstance<T>();
foreach (var pro in properties)
{
if (columnNames.Contains(pro.Name))
{
pro.SetValue(objT, row[pro.Name], null);
}
}
return objT;
}).ToList();
}
pro.SetValue で整数フィールドの null 値をヒットした場合を除いて、うまく機能します。失敗する理由は、pro.SetValue(objT, null,null) のように 2 番目のパラメーターが null の場合、pro.SetValue が型の既定値を設定するためです。しかし、私のrow[IdColumn]はnullではなく空のオブジェクト{}を返します。私が得ているエラーは次のとおりです。
タイプ 'System.DBNull' のオブジェクトは、タイプ 'System.Nullable`1[System.Int32]' に変換できません。
使用時int?
と
タイプ 'System.DBNull' のオブジェクトは、タイプ [System.Int32]' に変換できません。
int
この場合の処理方法を教えてください。