C# 在每个循环中创建一个新对象
我在数据库连接中有一个while循环,我想从数据库检索的值中创建一个对象。 这是我使用的代码:C# 在每个循环中创建一个新对象,c#,list,while-loop,C#,List,While Loop,我在数据库连接中有一个while循环,我想从数据库检索的值中创建一个对象。 这是我使用的代码: public void dbConnect() { using (SqlConnection myConnection = new SqlConnection("server=CHAYU\\SQLEXPRESS;" + "Trusted_Connection=yes;" +
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);
}
List mList=new List();
while(oReader.Read())
{
餐m=新餐();
m、 mealID=Convert.ToInt32(或阅读器[“mealID”]);
m、 mealName=oReader[“mealName”].ToString();
m、 数量=转换为32(或读取器[“数量]);
m、 timeToProduce=Convert.ToInt32(或阅读器[“timeToProduce”]);
m、 可用性=真;
m列表添加(m);
}
将循环中创建的每个对象添加到列表中。默认情况下,在循环中创建的每顿饭都是一个不同的引用,但您不会将它们存储在任何地方以供以后操作。使用此扩展方法获取datareder类中的对象列表
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;
}
公共静态列表数据读取器列表(IDataReader dr)
{
列表=新列表();
T obj=默认值(T);
while(dr.Read()){
obj=Activator.CreateInstance();
foreach(obj.GetType().GetProperties()中的PropertyInfo属性){
如果(!object.Equals(dr[prop.Name],DBNull.Value)){
属性设置值(obj,dr[属性名称],null);
}
}
列表。添加(obj);
}
退货清单;
}
然后像这样使用它
List<Meal> MealList = new List<Meal>();
MealList = DataReaderMapToList<Meal>(reader);
List-MealList=new List();
MealList=数据读取器列表(读取器);
您的问题不清楚。。。但听起来你应该创建一个集合……不要使用select*PLS,只选择你需要的。@Praveen绝对不是ArrayList@谢谢你纠正我。事实上,我出错了如果我想编辑对象的属性值,我可以在它进入列表后进行编辑吗?是的,通过它的索引mList[0]访问它代码>或通过LinqmList.Where(x=>x.mealID==10.First().mealName=“Chips”代码>