我已经被要求对数据集应用条件排序,我试图找出如何通过LINQ实现这一点。在此特定域中,采购订单可以标记为主要或次要。确定主要/次要地位的确切机制相当复杂,与当前的问题没有密切关系。实现通过Linq到对象的复杂排序
考虑下面的数据集。
Purchase Order Ship Date Shipping Address Total
6 1/16/2006 Tallahassee FL 500.45
19.1 2/25/2006 Milwaukee WI 255.69
5.1 4/11/2006 Chicago IL 199.99
8 5/16/2006 Fresno CA 458.22
19 7/3/2006 Seattle WA 151.55
5 5/1/2006 Avery UT 788.52
5.2 8/22/2006 Rice Lake MO 655.00
辅助采购订单是那些有十进制数,主要采购订单是那些具有整数。我要处理的要求规定,当用户选择对给定列进行排序时,排序应为只有应用于主要PO。次要采购订单在分拣时被忽略,但仍应在发货日期降序下列在主要采购订单下方。
例如,假设用户按送货地址升序排序。数据将按如下排序。请注意,如果你忽略了次要的采购订单,该数据是通过地址升序(艾利,弗雷斯诺,西雅图,塔拉哈西)
Purchase Order Ship Date Shipping Address Total
5 5/1/2006 Avery UT 788.52
--5.2 8/22/2006 Rice Lake MO 655.00
--5.1 4/11/2006 Chicago IL 199.99
8 5/16/2006 Fresno CA 458.22
19 7/3/2006 Seattle WA 151.55
--19.1 2/25/2006 Milwaukee WI 255.69
6 1/16/2006 Tallahassee FL 500.45
有没有办法实现使用排序依据扩展方法预期的效果?或者我坚持(最好)将这种排序应用于两个独立的数据集,然后合并为一个结果集?
public IList<PurchaseOrder> ApplySort(bool sortAsc)
{
var primary = purchaseOrders.Where(po => po.IsPrimary)
.OrderBy(po => po.ShippingAddress).ToList();
var secondary = purchaseOrders.Where(po => !po.IsPrimary)
.OrderByDescending(po => po.ShipDate).ToList();
//merge 2 lists somehow so that secondary POs are inserted after their primary
}
棒极了。这与我所需要的非常接近。我仍然需要在每个分组中对ShipDate上的次要事件进行排序。有任何想法吗? – 2009-11-17 16:39:08