每次循环创建一个新对象

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);