私はLINQ(C#)でOrder要素のテーブルをクエリしています。各注文には次のフィールドがあります。LINQ - 複雑な並べ替え
- ID
- OpenDate
- PriorityID
- StatusID
- Description
StatusIDフィールドはステータステーブルにマップします。私は彼らの優先順位やステータスによって並べ替えOrderオブジェクトのすべてを取得する必要があり
- ID
- Name
:ステータステーブルは次のように構成されています。 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は、ランダムで役立たない順序でしっかりと設定されています。私はそれらを変更することはできません。あなたが分かるように、アルファベット名でステータスをソートすることはできません。また、データベースにフィールドを追加することはできません。誰も私がLINQでこの問題を解決できる方法を教えてもらえますか?
ありがとうございました!
こちらもトップ(テイク)を取っていますか? DBで処理する必要があるのか、それとも.NETコードでソートできるのか不思議です... –
はい、ソートする必要がある項目はいくつですか?クライアントサイドで行うことができるのであれば、IComparerまたはComparisonデリゲート 'List.OrderBy(x、y => ...)'は十分です。 –
フロントエンドのOrderクラスに計算フィールドを追加できますか?その後、そのフィールドでソートすることができます。次のようなものがあります: "select new {SortField =ここでソートインデックスを計算}" – Andrei