将类加载为列表

时间:2011-05-03 07:15:45

标签: c# list

我有一个班级

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循环检索它们?

7 个答案:

答案 0 :(得分:8)

创建一个列表: - )

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,因为这就是它真正代表的内容:一个顺序。要获得更多订单,您需要将这些单个订单放入列表中。

答案 1 :(得分:2)

我认为你正在寻找这样的东西:

IEnumberable<Order> FetchOrders()
{
    while(dr.Read())
        yield return new Order {
          idOrder=dr["IdOrder"].ToString(), 
          totalPrice=dr["totalPrice"].ToString()
        });
}

答案 2 :(得分:2)

它只向您显示一个项目,因为您只更改了一个项目的属性,而不是实例化一个新项目:

var results = new List<Order>();

while (reader.Read())
{
  var order = new Order
  {
    Id = (int)reader["IdOrder"],
    TotalPrice = (decimal)reader["totalPrice"]
  };

  results.Add(order);
}

答案 3 :(得分:2)

Orders类代表单个订单!如果您需要的是订单列表,那么我建议您将该类重命名为Order,然后创建一个List<Order>(订单对象列表)并从查询结果中填充该列表。

另外(请原谅我是不安全的)“idOrder”不是一个好的字段名称。标准方法是“orderId”或只是普通的旧“Id”(ID,甚至id)。同样地,我认为单价的价格只被称为“金额”,甚至“价格”......而不是“总价格”...当你总计总价格时,它会太混乱......让我的漂移?

干杯。基思。

答案 4 :(得分:1)

我不知道如何编译。 Orders.idOrder不是静态属性,它是一个实例属性。

答案 5 :(得分:0)

如果我理解你,你想要使用这样的东西:

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

答案 6 :(得分:0)

请注意我只是讨论更多@Grook答案。我认为它非常接近想要的东西。

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

是否清楚?