每次循环创建一个新对象
Create a new object each loop
我在数据库连接中有一个 while 循环,我想在其中根据从数据库中检索到的值创建一个对象。
这是我使用的代码:
public void dbConnect()
{
using (SqlConnection myConnection = new SqlConnection("server=CHAYU\SQLEXPRESS;" +
"Trusted_Connection=yes;" +
"database=restaurantApp; " +
"connection timeout=30"))
{
string oString = "Select * from Meal where availability=1";
SqlCommand oCmd = new SqlCommand(oString, myConnection);
myConnection.Open();
using (SqlDataReader oReader = oCmd.ExecuteReader())
{
while (oReader.Read())
{
Meal m = new Meal();
m.mealID = Convert.ToInt32(oReader["mealId"]);
m.mealName = oReader["mealName"].ToString();
m.quantity=Convert.ToInt32(oReader["quantity"]);
m.timeToProduce = Convert.ToInt32(oReader["timeToProduce"]);
m.availability = true;
}
myConnection.Close();
}
}
}
我想在每次加载窗体时调用这段代码,以便在开始时创建对象,然后再对它们进行操作。但是,我的问题是,如何通过在 while 循环内对对象使用不同的引用变量来做到这一点?
每餐都要吃吗?创建一个列表并在其中迭代时存储您的膳食对象!
List<Meal> mList = new List<Meal>();
while (oReader.Read())
{
Meal m = new Meal();
m.mealID = Convert.ToInt32(oReader["mealId"]);
m.mealName = oReader["mealName"].ToString();
m.quantity = Convert.ToInt32(oReader["quantity"]);
m.timeToProduce = Convert.ToInt32(oReader["timeToProduce"]);
m.availability = true;
mList.Add(m);
}
将循环中创建的每个对象添加到列表中。默认情况下,在循环中创建的每个膳食都是不同的引用,但您不会将它们存储在任何地方以供以后操作。
使用此扩展方法获取数据编辑器中的对象列表class
public static List<T> DataReaderMapToList<T>(IDataReader dr)
{
List<T> list = new List<T>();
T obj = default(T);
while (dr.Read()) {
obj = Activator.CreateInstance<T>();
foreach (PropertyInfo prop in obj.GetType().GetProperties()) {
if (!object.Equals(dr[prop.Name], DBNull.Value)) {
prop.SetValue(obj, dr[prop.Name], null);
}
}
list.Add(obj);
}
return list;
}
那就这样用吧
List<Meal> MealList = new List<Meal>();
MealList = DataReaderMapToList<Meal>(reader);
我在数据库连接中有一个 while 循环,我想在其中根据从数据库中检索到的值创建一个对象。 这是我使用的代码:
public void dbConnect()
{
using (SqlConnection myConnection = new SqlConnection("server=CHAYU\SQLEXPRESS;" +
"Trusted_Connection=yes;" +
"database=restaurantApp; " +
"connection timeout=30"))
{
string oString = "Select * from Meal where availability=1";
SqlCommand oCmd = new SqlCommand(oString, myConnection);
myConnection.Open();
using (SqlDataReader oReader = oCmd.ExecuteReader())
{
while (oReader.Read())
{
Meal m = new Meal();
m.mealID = Convert.ToInt32(oReader["mealId"]);
m.mealName = oReader["mealName"].ToString();
m.quantity=Convert.ToInt32(oReader["quantity"]);
m.timeToProduce = Convert.ToInt32(oReader["timeToProduce"]);
m.availability = true;
}
myConnection.Close();
}
}
}
我想在每次加载窗体时调用这段代码,以便在开始时创建对象,然后再对它们进行操作。但是,我的问题是,如何通过在 while 循环内对对象使用不同的引用变量来做到这一点?
每餐都要吃吗?创建一个列表并在其中迭代时存储您的膳食对象!
List<Meal> mList = new List<Meal>();
while (oReader.Read())
{
Meal m = new Meal();
m.mealID = Convert.ToInt32(oReader["mealId"]);
m.mealName = oReader["mealName"].ToString();
m.quantity = Convert.ToInt32(oReader["quantity"]);
m.timeToProduce = Convert.ToInt32(oReader["timeToProduce"]);
m.availability = true;
mList.Add(m);
}
将循环中创建的每个对象添加到列表中。默认情况下,在循环中创建的每个膳食都是不同的引用,但您不会将它们存储在任何地方以供以后操作。
使用此扩展方法获取数据编辑器中的对象列表class
public static List<T> DataReaderMapToList<T>(IDataReader dr)
{
List<T> list = new List<T>();
T obj = default(T);
while (dr.Read()) {
obj = Activator.CreateInstance<T>();
foreach (PropertyInfo prop in obj.GetType().GetProperties()) {
if (!object.Equals(dr[prop.Name], DBNull.Value)) {
prop.SetValue(obj, dr[prop.Name], null);
}
}
list.Add(obj);
}
return list;
}
那就这样用吧
List<Meal> MealList = new List<Meal>();
MealList = DataReaderMapToList<Meal>(reader);