IDataReaderを使用してオブジェクトにデータを入力する関数があります。
private void FillDataItem(IDataReader datareader)
{
this.CompanyCode = datareader.GetString(datareader.GetOrdinal("COMPANY"));
this.Name = datareader.GetString(datareader.GetOrdinal("NAME"));
//...and so on
}
これは、SqlDataReaderを使用して、SQLクエリの結果に基づいてオブジェクトのフィールドにデータを入力する場合に非常に便利です。ほとんどすべてのクラスには、IDataReaderを受け取るこの種の「FillDataItem」があります。データベースオブジェクトをコードに取り込むのが途方もなく簡単になります。
ただし、同じことを実行したいのですが、データソースとしてDataTableのDataRowを使用します。状況は、SQLクエリからのものとまったく同じ形式(同じ列)のカスタムビルドのDataTableが表示されますが、そのような外部データソースからのものではありません。DataTableの行をループし、各行で、上記のFillDataItem()メソッドと同じ方法でオブジェクトを入力します。
もちろん、DataRowをパラメーターとして受け取るオーバーロードされた新しいメソッドを作成することもできます。
private void FillDataItem(DataRow datarow)
{
this.CompanyCode = datarow["COMPANY"].ToString();
this.Name = datarow["NAME"].ToString();
//...and so on
}
しかし、これはIDataReaderバージョンと非常に似ているため、このような類似のコードを複製する必要がないように、1つのメソッドで目標を達成する方法を本当に知りたいと思います。フィールドがたくさんあることを考えると、FillDataItemメソッドは200行の長さです。これをコピーしてDataRowバージョンに貼り付けるのは無駄であり、保守が難しいようです。