私は識別子に基づいてDataTableを返すAPIを持つ基本クラスを持っています そして、私は各識別子のオブジェクトを持つ必要があります。DataTableから汎用リストに変換する最も速い方法は何ですか?
私はデータテーブルで作業することを嫌っています。そのため、マッピングコード を書いて、データテーブルの特定のフィールドにプロパティをマップするだけでした。
私の例ではなく、もっと速い方法がありますか?
ありがとうございました。
public abstract class BaseClass<T> where T : BaseClass<T>
{
protected abstract T MapObject(DataRow row);
protected abstract int SomeIdentifier { get; }
public IList<T> GetData()
{
return ConvertDataTableToGenericList(GetDataTableFromOtherSource(this.SomeIdentifier));
}
private IList<T> ConvertDataTableToGenericList(DataTable table)
{
IList<T> objectList = new List<T>();
foreach (DataRow row in table.Rows)
{
objectList.Add(MapObject(row));
}
return objectList;
}
}
public class DerivedClass : BaseClass<DerivedClass>
{
public int ID { get; set; }
protected override int SomeIdentifier
{
get { return 1; }
}
protected override DerivedClass MapObject(DataRow row)
{
return new DerivedClass()
{
ID = (int)row["ID"]
};
}
}
明らかなボトルネックはありません。ただし、テーブルのRowCountを知っているので、その開始容量でリストを構築することができます。アイテムの数が多い場合(これは実際のマイクロマイクロ最適化であり、パフォーマンスの差が顕著ではないと思われます)、リストにいくつかの再割り当てを保存します。 – driis