C# 如何按两个条件对列表进行排序

C# 如何按两个条件对列表进行排序,c#,list,arraylist,C#,List,Arraylist,我有点卡住了。。。我有如下结构的哈希表的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

我有点卡住了。。。我有如下结构的哈希表的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年度结束的季度 来自Linq查询的数据如下所示:

签署日期:2013-10-05, 完:2014-02-15, 总数:65000

签署日期:2014-01-21, 完:2016-01-21, 总数:45000

签署日期:2014-03-24, 完:2015-06-24, 总数:95000

我必须在签字日期前订购,并在实际的年终季度结束。因此,上述列表的顺序如下:

签署日期:2014-01-21, 完:2016-01-21, 总数:45000

签署日期:2013-10-05, 完:2014-02-15, 总数:65000

签署日期:2014-03-24, 完:2015-06-24, 总数:95000

正如您所看到的,我通过sign_date查询它们,但是这个列表也没有按第二个日期排序。只有在实际季度范围内,结束才相关

如何执行此任务


多谢各位

不要使用System.Collection类,如ArrayList,请使用泛型-System.Collection.Generic.List。然后它就像列表一样简单。OrderBya=>a.prop1.OrderByb=>b.prop2

Great:但是我如何访问orderBy中的signdate和end项呢?list.OrderByo=>o.???代码示例有点不清楚,我猜bondElement实际上是示例中的dtElement,但您的大问题似乎是您使用的是非泛型集合。您应该将哈希表替换为System.Collections.Generic.Dictionary,其中T是您的类型。但是我怀疑使用键/值对来收集foreach循环中的值是否明智,如果可能的话,您最好创建一个具有3个属性的新类型。是的,我修复了名称问题。我现在正在尝试:dtList.OrderByo=>o[signdate].OrderByo=>o[end];我使用hashtable,因为不是所有三个属性都有相同的数据类型。两个DataTimes和一个Double这就是为什么你应该使用一个类而不是一个哈希表,并创建一个该类的实例列表,或者在每次迭代中使用一个新的{…},将对象添加到一个列表中。你的代码中也有一个bug,由于每次迭代都使用同一个实例,所以不断更新哈希表中的相同元素,因此列表中的所有哈希表目前都具有相同的值。