将类装入列表

本文关键字:列表 装入 | 更新日期: 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);
}

是否清楚?