2014-04-02 37 views
0

我有點卡住訂購列表...我有哈希表的ArrayList的這種結構:如何通過兩個條件

DataClasses1DataContext csdx = new DataClasses1DataContext(); 

IQueryable<dataType> dtList = csdx.datatypes.Where(dd => !dd.data_approve_date.Equals(null)).OrderBy(dd => dd.data_sign_date); 


     dtList = dtList.Where(dt => dt.data_end <= qEnd || dt.data_sign_date <= qEnd); 

     ArrayList dtList = new ArrayList(); 
     Hashtable dtElement = new Hashtable(); 

     foreach (dataType dtt in dtList.ToList()) 
      { 
       dtElement["signdate"] = dtt.data_sign_date.Date; 
       dtElement["end"] = dtt.data_end; 
       dtElement["sum"] = dtt.data_sum; 

       dtList.Add(dtElement); 
     } 

QEND是一年的封閉季度末(2014- 03-31) 的DATAS就像這些從LINQ查詢來:

signdate:2013年10月5日, 端:2014年2月15日, 總和:65000

signdate:2014-01 -21, 截止日期:2016-01-21, 金額:45000

signdate:2014年3月24日, 結束:2015年6月24日, 金額:95000

我有實際(關閉),去年同期signdate和結束對它們進行排序。所以上面列表的順序是這樣的:

signdate:2014年1月21日, 結束:2016年1月21日, 金額:45000

signdate:2013年10月5日, 結束:2014年2月15日, 金額:65000

signdate:2014年3月24日, 結束:2015年6月24日, 金額:95000

正如你可以看到我通過sign_date對它們進行查詢,但是這個列表並沒有被排序爲第二個日期。只有當它在實際的四分之一範圍內時才結束。

我該如何執行此任務?

非常感謝!

+0

你能說清楚嗎? –

回答

0

不要使用像ArrayList這樣的System.Collection類,請使用泛型 - System.Collection.Generic.List。然後它就像list.OrderBy(a => a.prop1).OrderBy(b => b.prop2)一樣簡單

+0

太棒了:)但是我怎樣才能訪問orderBy中的「signdate」和「end」項呢? list.OrderBy(o => o。???) – VORiAND

+0

該代碼示例有點不清楚(我猜bondElement實際上是dtElement在示例中),但似乎您的大問題是您使用的是非泛型集合。您應該用System.Collections.Generic.Dictionary 替換Hashtable,其中T是您的類型。但我會質疑使用鍵/值對來收集foreach循環中的值的智慧,如果可能的話,最好創建一個具有3個屬性IMO的新類型。 – garryp

+0

是的,我解決了名稱問題。我試着用這個:dtList.OrderBy(o => o [「signdate」])。OrderBy(o => o [「end」]);那麼,我使用散列表,因爲並非所有三個屬性都具有相同的數據類型。 (兩個DataTime和一個雙精度) – VORiAND