Меня попросили применить условную сортировку к набору данных, и я пытаюсь выяснить, как достичь этого через 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 - это те, у которых есть десятичное число, а первичные PO - это целые числа. Требование, которое я имею в виду, гласит, что, когда пользователь выбирает сортировку по данному столбцу, сортировка должна быть только применяется к первичным PO. Вторичные PO-адреса игнорируются для целей сортировки, но все же должны быть перечислены ниже их основного ПО в порядке убывания даты отправки.
Например, пользователь сортируется по адресу доставки по возрастанию. Данные будут отсортированы следующим образом. Обратите внимание, что если вы игнорируете вторичный ДДУ данные сортируются по возрастанию Адрес (Avery, Фресно, Сиэтл, Таллахасси)
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
Есть ли способ, чтобы достичь желаемого эффекта с помощью метода расширения OrderBy? Или я застрял (лучше), применяя сортировку к двум наборам данных независимо, а затем объединившись в один набор результатов?
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 в каждой группе. Есть идеи? –