订单有3种不同的属性

时间:2016-04-11 15:06:41

标签: c# linq asp.net-mvc-5

为了解释的目的......让我说我有一个由我的数据库中的表生成的表..

此表包含3条信息,FlightDateAircraftPre / 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

正如你所看到的那样,那张桌子没有订单(可能是日期,但我刚刚做了这个)。

现在我想要发生的是当页面加载显示此表时,AircraftPre / Post基于{{1}排序的表格}} ...

基本上我正在寻找的东西:

Date

有没有办法使用 .OrderBy 方法来实现这个结果?

4 个答案:

答案 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组合ThenByPre/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