在这篇 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__)
- 更新二 -
一种笨拙的方法是发出两个单独的查询,如下所示:
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)
并将它们连接起来