2011-05-03 21 views
2

我有一個類加載類的列表

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循環檢索它們?

+3

列表在哪裏? – 2011-05-03 07:21:23

+0

@Marc Gravell我不知道如何在這種類型的scenerio中創建列表。我是一個初學者:-) – Chris 2011-05-03 07:24:58

+0

產量回報只是收集你的價值觀並作爲一個列表返回它。產後回報控制不會退出功能 – Saleh 2011-05-03 07:35:15

回答

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

正如你看到的,我改名爲你的類從OrdersOrder清單,因爲這是它真正代表:一個秩序。要獲得更多訂單,您需要將這些單個訂單放入列表中。

+1

你打我吧:) +1 – 2011-05-03 07:22:09

+0

我已經發布了相同的代碼,相同的想法;) – trampi 2011-05-03 07:28:36

+0

除了你的不會編譯;-) – 2011-05-03 07:31:00

2

我認爲你正在尋找的東西是這樣的:

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

它認爲你的答案接近他或她想要的。+1 – Saleh 2011-05-03 07:27:52

+0

@格魯克我對語句產量回報有點困惑 – Chris 2011-05-03 07:30:35

+0

@格魯克:我認爲你的答案對於初學者來說太複雜了。 (沒有投票)。 – 2011-05-03 07:33:18

1

我不知道如何將編譯。 Orders.idOrder不是一個靜態屬性,它是一個實例屬性。

+0

它編譯正確,我也得到了輸出。我做了什麼不對嗎?給我建議,以便我可以更正邏輯 – Chris 2011-05-03 07:26:20

+0

當idOrder(及其支持成員)未聲明爲靜態時,如何設置Orders.idOrder? – 2011-05-03 07:37:35

2

這只是顯示你的一個項目,因爲你只有在一個項目更改屬性,沒有實例化一個新問題:

var results = new List<Order>(); 

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

    results.Add(order); 
} 
+0

唉,但idOrder和TotalPrice是字符串 – 2011-05-03 07:23:24

+0

非常真實,但我認爲他還需要解決類型套管,成員命名約定和適當的類型使用;-) – 2011-05-03 07:25:31

+0

@Rakshit,我認爲馬特在這裏有幾個好點。在一個字符串字段中存儲一個整數Id(如果它是一個整數值?)只是簡單的效率低下.... AND在一個字符串字段中存儲一個價格(任何金額)只是簡單的錯誤!計算機做的很多事情是加起來的錢...所以不應該將價格存儲爲數字嗎?對於貨幣價值來說,「小數」是一個很好的選擇,因爲小數的計算會產生準確的(或可預測的)結果。 – corlettk 2011-05-03 07:45:31

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

Orders類代表一個訂購!如果您需要的是訂單列表,那麼我建議您將該類重命名爲Order,然後創建一個List<Order>(訂單對象列表)並從查詢結果中填充該列表。

另外(請原諒我的口吻)「idOrder」不是一個好的字段名稱。標準方法是「orderId」或者只是普通的舊「Id」(ID或甚至id)。同樣,我也希望一次定價被稱爲「金額」,甚至是「價格」......而不是「全價」......當你總計總價時, ...讓我的漂移?

乾杯。基思。

+0

我是Waaaaay太慢了!一定是開始老了! ;-) – corlettk 2011-05-03 07:25:02

+1

+1的描述。我真的需要理解爲初學者。 – Chris 2011-05-03 07:27:30

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

是否清楚?