我查詢Order元素與LINQ(C#)的表。每個訂單都有以下字段:LINQ - 複雜的排序
- ID
- OpenDate
- PriorityID
- StatusID
- Description
StatusID字段映射到狀態表。狀態表的結構爲:
- ID
- Name
我需要獲取按優先級和狀態排序的所有Order對象。 我可以成功獲取按優先級排序的Order對象。我通過 下面這樣:
List<Order> orders = new List<Order>();
using (DBDataContext context = new DBDataContext())
{
orders = (from o in context.Orders
orderby (o.PriorityID.HasValue ? o.PriorityID : Int32.MaxValue) ascending
select o).ToList();
}
但我的問題是在狀態融通。
一旦訂單對象按優先級排序,我需要按以下狀態順序對訂單對象 進行排序:已取消,已打開,正在路由和已遞送。值得注意的是,這些「狀態」值的ID以固定的隨機順序固定設置。我無法改變它們。正如你所看到的,我無法通過alphbetical的名字來排序。另外,我不能將任何字段添加到我的數據庫中。任何人都可以告訴我如何在LINQ中解決這個問題?
謝謝!
你是否也在頂部(Take)在這裏?我想知道是否需要在數據庫中完成,或者是否可以在.NET代碼中進行排序...... –
是的,需要對多少項進行排序?如果你可以做到客戶端,那麼IComparer或比較委託'List.OrderBy(x,y => ...)'會很多。 –
您可以在前端爲您的訂單類添加計算字段嗎?然後你可以按照該字段排序。例如:「select new {SortField =在此計算排序索引}」。 – Andrei