C# 如何按两个条件对列表进行排序
我有点卡住了。。。我有如下结构的哈希表的ArrayList: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
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.prop2Great:但是我如何访问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,由于每次迭代都使用同一个实例,所以不断更新哈希表中的相同元素,因此列表中的所有哈希表目前都具有相同的值。