我有一个班级
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循环检索它们?
答案 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);
}
是否清楚?