多くの繰り返しコードを持つデータ アクセス レイヤーの名前空間があります (ほとんどの場合、コマンド オブジェクトを設定し、ストアド プロシージャを実行して、リストに追加されるデータ セットを返します)。を返すジェネリック ファクトリ メソッドを作成しようとしていますList<T>
。私はジェネリックとデリゲートの両方に比較的慣れていません。私の考えは、に追加されるオブジェクトを作成する Func パラメータを持つことでしたList<T>
。通常のwhile dataReader.Read()
ブロック内で呼び出されます。私の問題は、使用するデータセットの列数がさまざまであることです。
これが私がこれまでに持っているものです:
private static List<T> ListFromDatabase<T,U>(String CommandName, SqlConnection SqlConn, Func<T,U> CreateListObj,
List<SqlParameter> ParamList = null)
{
List<T> returnList = new List<T>();
using (SqlCommand cmd = new SqlCommand(CommandName,SqlConn))
{
cmd.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter sp in ParamList)
{
if (sp.Value == null)
sp.Value = DBNull.Value;
cmd.Parameters.Add(sp);
}
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{
returnList.Add(CreateListObj);
}
}
return returnList;
}
私の現在の理解レベルでは、さまざまな数のパラメーターに対して Func シグネチャを変更する必要がある可能性が高いため、これは不可能かもしれません。これは実行可能ですか、それとも近いですか?そうでない場合、誰かが助けてくれるなら、私は別のアプローチを受け入れます。事前に多くの感謝..
更新:これはまさに私が探していたものです: