この SO 記事: LINQ での昇順/降順 - パラメータを使用して順序を変更できますか? 昇順または降順で条件付きで並べ替える方法についての解決策が提示されました。
この記事で取り上げていないのは、クエリ内のデータに基づいて決定を下したい場合 (つまり、実際には何が最も可能性が高いか) ということです。
私はできないようです:
source.OrderByWithDirection(o => o.MyColumnToOrderBy, o => o.SortingDirection)
その後、メソッドを書き直す必要がありますか? どうやって?
- アップデート -
根拠として、これが私が達成しようとしていることです:
Strike Type Price
98 Ask 101
98 Ask 100
98 Ask 99
98 Bid 95
98 Bid 96
98 Bid 97
ご覧のとおり、アスクは下にソートされますが、入札は上にソートされ、最大の差を持つ行が隣り合っています。だから私が言いたいのは次のようなものです:
source.OrderBy(o => new { o.Strike, o.Type })
.ThenByWithDirection(o => o.Price, o => o.Type == "Ask" ? __down__ : __up__)
- アップデートⅡ -
これを行う不器用な方法は、次のように 2 つの別個のクエリを発行することです。
source
.Where(o => o.Type == "Ask")
.OrderBy(o => new { o.Strike, o.Type })
.ThenBy(o => o.Price)
source
.Where(o => o.Type == "Bid")
.OrderBy(o => new { o.Strike, o.Type })
.ThenByDescending(o => o.Price)
それらを連結します