我创建了一个类Student
,并且在类中它具有以下属性:
class Student: IEnumerable<Student>
{
private int age =0 ;
private string name ="";
private bool isAdult = false;
List<Student> StudentList = new List<Student>();
public Student this[int index]
{
get { return StudentList [index]; }
set { StudentList .Insert(index, value); }
}
public IEnumerator<Student> GetEnumerator()
{
return StudentList.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
public string Name
{
get { return name ; }
set { name = value; }
}
public int Age
{
get { return age ; }
set { age = value; }
}
public bool IsAdult
{
get { return isAdult ; }
set { isAdult = value; }
}
}
现在我想做的是在新的学生列表中加载oracle查询的结果
//...
try
List < Student > StudentList = new List < Student > (); {
OracleCommand command = new OracleCommand(sqlQuery, connection);
OracleDataReader oracleDataReader = command.ExecuteReader();
while (oracleDataReader.Read()) {
age = Convert.Int64(oracleDataReader["age"]);
name = oracleDataReader["name"].toString();
isAdult = Convert.boolean(oracleDataReader["isAdult"])
}
}
//...
让我们说查询返回100名学生,学生班实际上包含10-15个属性,我只用3(姓名,年龄,成人)作为例子来解释我的问题
是否可以在查询中每个返回的行中加载StudentList
?
答案 0 :(得分:3)
主要问题是您的Student
类尝试实现IEnumerable<Student>
接口。这没有意义。 IEnumerable<Student>
接口应该由其他一些类实现。或者您使用实现此接口的List<...>
类。 Student
类应该只包含您要为学生保存的值。
假设你在while循环的某个地方只有一个List<Student>
对象,你可以迭代数据库中的行,创建一个新的Student
对象并将其添加到列表中。
IList<Student> students = new List<Student>();
while (oracleDataReader.Read()) {
int age = Convert.Int64(oracleDataReader["age"]);
string name = oracleDataReader["name"].toString();
bool isAdult = Convert.boolean(oracleDataReader["isAdult"]);
Student student = new Student {
age = age,
name = name,
isAdult = isAdult
};
students.Add(student);
}
然后,您可以使用students
列表。