我有一个数据访问层命名空间,其中包含大量重复代码(主要是设置命令对象并执行存储过程以返回添加到列表中的数据集)。我正在尝试编写一个返回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 签名。这是可行的还是接近的?如果不是,我愿意采用不同的方法,如果有人可以提供帮助。提前谢谢了..
更新:这正是我想要的: