我正在重构我的代码。考虑下面这个例子......SQL查询的日期时间参数
public virtual List<Student> FetchEnrollmentList(DateTime admissionDateFrom,
DateTime admissionDateTo)
{
var students = new List<Student>();
using (oconn = new OleDbConnection(OracleConnection))
{
oconn.Open();
query = "SELECT * FROM Enrollment Where AdmissionDate between @AdmissionDateFrom and @AdmissionDateTo ";
using (ocmd = new OleDbCommand(query, oconn))
{
ocmd.Parameters.Add("@AdmissionDateFrom", OleDbType.Date).Value = admissionDateFrom;
ocmd.Parameters.Add("@AdmissionDateTo", OleDbType.Date).Value = admissionDateTo;
using (odr = ocmd.ExecuteReader())
{
while (odr.Read())
students.Add(new Student { Name = odr["StudentName"].ToString() });
}
}
}
return students;
}
我只是想消除From和To所以我创建了一个类型这样
public virtual List<Student> FetchEnrollmentList(DateSpan admissionDate)
{
var students = new List<Student>();
using (oconn = new OleDbConnection(OracleConnection))
{
oconn.Open();
query = "SELECT * FROM Enrollment Where AdmissionDate between @AdmissionDateFrom and @AdmissionDateTo ";
using (ocmd = new OleDbCommand(query, oconn))
{
ocmd.Parameters.Add("@AdmissionDateFrom", OleDbType.Date).Value = admissionDate.Start;
ocmd.Parameters.Add("@AdmissionDateTo", OleDbType.Date).Value = admissionDate.End;
using (odr = ocmd.ExecuteReader())
{
while (odr.Read())
students.Add(new Student { Name = odr["StudentName"].ToString() });
}
}
}
return students;
}
是否确定有它这样的吗?任何其他想法?感谢....
我喜欢第一个例子更好,更容易阅读。你为什么需要重构? – Martin 2010-10-30 17:08:40
我只是希望减少参数的数量,想象如果我有3个日期范围参数像这样在一个单一的方法?我将不得不写3个froms和3 to:p – CSharpNoob 2010-10-30 17:19:51
@Martin借调 – 2010-10-30 17:19:56