将类装入列表
本文关键字:列表 装入 | 更新日期: 2023-09-27 17:54:55
我有一个class
public class Orders
{
public Orders() {}
private string _idOrder;
private string _totalPrice;
public string idOrder
{
get{ return _idOrder;}
set { _idOrder = value;}
}
public string totalPrice
{
get { return _totalPrice; }
set { _totalPrice = value; }
}
}
我正在从数据库中加载列表,像这样
while (dr.Read())
{
Orders.idOrder = dr["IdOrder"].ToString();
Orders.totalPrice= dr["totalPrice"].ToString();
}
它只显示最后的记录。如何加载所有订单并通过foreach循环检索它们?
创建一个列表:-)
List<Order> orders = new List<Order>();
while (dr.Read())
{
Order order = new Order();
order.idOrder = dr["IdOrder"].ToString();
order.totalPrice= dr["totalPrice"].ToString();
orders.Add(order);
}
如您所见,我将您的类从Orders
重命名为Order
,因为这才是它真正代表的:一个顺序。要获得更多订单,您需要将这些单个订单放入一个列表中。
它只显示了一个项目,因为你只改变了一个项目的属性,而不是实例化一个新的项目:
var results = new List<Order>();
while (reader.Read())
{
var order = new Order
{
Id = (int)reader["IdOrder"],
TotalPrice = (decimal)reader["totalPrice"]
};
results.Add(order);
}
我想你在找这样的东西:
IEnumberable<Order> FetchOrders()
{
while(dr.Read())
yield return new Order {
idOrder=dr["IdOrder"].ToString(),
totalPrice=dr["totalPrice"].ToString()
});
}
Orders
类代表一个单订单!如果您需要的是订单列表,那么我建议您将该类重命名为Order,然后创建List<Order>
(订单对象列表)并根据查询结果填充该列表。
也(原谅我的挑剔)"idOrder"不是一个好的字段名。标准的方法是"orderId"或简单的旧"Id"(Id,甚至Id)。同样,我希望单次订单的价格只被称为"数量",甚至是"价格"……不是"totalPrice"……当你把总价格加起来的时候就会很混乱了……明白我的意思吗?
欢呼。基斯。
我不知道这将如何编译。订单。idOrder不是一个静态属性,它是一个实例属性
如果我没理解错的话,你想用这样的东西:
List<Order> = new List<Order>();
while (dr.Read())
{
Order newOrder = new Order();
newOrder.idOrder = dr["IdOrder"].ToString();
newOrder.totalPrice= dr["totalPrice"].ToString();
orderList.Add(newOrder);
}
请注意,我只是为@Grook Answer讨论了更多内容。我想这离我想要的太近了。
IEnumberable<Order> FetchOrders()
{
while(dr.Read())
yield return new Order {
idOrder=dr["IdOrder"].ToString(),
totalPrice=dr["totalPrice"].ToString()
});
}
那么你可以很容易地使用foreach循环
Foreach(Order order in GetOrders())
{
doSomething(order);
}
是否清楚?