为了解释的目的......让我说我有一个由我的数据库中的表生成的表..
此表包含3条信息,FlightDate
,Aircraft
,Pre / Post
。
所以,这背后的逻辑是每天应该有飞行前和飞行后。
现在,为了清楚起见,让我们说到目前为止的表格如下:
|Date| | |Aircraft| | |Pre / Post|
04/08/2016 | aircraft1 | Pre-Flight
04/08/2016 | aircraft3 | Pre-Flight
04/08/2016 | aircraft2 | Pre-Flight
04/08/2016 | aircraft3 | Post-Flight
04/08/2016 | aircraft1 | Post-Flight
04/08/2016 | aircraft2 | Post-Flight
正如你所看到的那样,那张桌子没有订单(可能是日期,但我刚刚做了这个)。
现在我想要发生的是当页面加载显示此表时,Aircraft
及Pre / Post
基于{{1}排序的表格}} ...
基本上我正在寻找的东西:
Date
有没有办法使用 .OrderBy 方法来实现这个结果?
答案 0 :(得分:7)
您可以分别使用OrderBy()
或ThenBy()
跟随第一个ThenByDescending()
来连接多个{{3}}来电:
// This would order by FlightDate, Aircraft then PrePost
var aircraftFlights = context.AircraftFlights.OrderBy(a => a.FlightDate)
.ThenBy(a => a.Aircraft)
.ThenBy(a => a.PrePost);
由于您希望您的预先飞行值始终位于您的航班后价值之前,您可以考虑明确使用该列的OrderByDescending()
(按照字母顺序后发布):
// Consider using ThenByDescending to get your Pre/Post ordering correct
.ThenBy(a => a.PrePost);
您可以根据自己的需要量身定制。基本上,当您拨打第一个OrderBy()
来电时,您的收藏就会变为OrderedEnumerable
,从而公开ThenBy()
和ThenByDescending()
来电,并会处理它们。
答案 1 :(得分:2)
您可以对要应用的每个排序约束使用OrderBy,然后使用ThenBy调用。假设您订购的可枚举具有所有三个属性,它可能如下所示:
myEnumerable.OrderBy(x => x.Aircraft).ThenBy(z => z.PrePost).ThenBy(a => a.Date);
答案 2 :(得分:2)
您需要使用lambda组合ThenBy
和Pre/Post
来评估var orderedTable = table.OrderBy(t => t.Aircraft).
ThenBy(t => t.Date).
ThenBy(t => t.PrePost == "Post-Flight" ? 1 : 0);
列。所以像这样:
{{1}}
答案 3 :(得分:1)
使用System.LinQ的ThenBy
扩展名。
您的代码可能如下所示:
var ordered = myFlights.OrderBy(f => f.Aircraft)
.ThenBy(f => f.prePost)
.ThenBy(f => f.Date);
如需参考,请查看MSDN documentation