Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OrderBy 3个不同的属性_C#_Linq_Asp.net Mvc 5 - Fatal编程技术网

C# OrderBy 3个不同的属性

C# OrderBy 3个不同的属性,c#,linq,asp.net-mvc-5,C#,Linq,Asp.net Mvc 5,为了便于解释。。。假设我有一个由数据库中的表生成的表 此表包含三条信息,FlightDate,airpair,Pre/Post 因此,这背后的逻辑是,每天应该有一次飞行前和飞行后 现在,为了清楚起见,让我们假设目前的表格如下所示: |Date| | |Aircraft| | |Pre / Post| 04/08/2016 | aircraft1 | Pre-Flight 04/08/2016 | aircraft3 |

为了便于解释。。。假设我有一个由数据库中的表生成的表

此表包含三条信息,
FlightDate
airpair
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
myEnumerable.OrderBy(x => x.Aircraft).ThenBy(z => z.PrePost).ThenBy(a => a.Date);
var orderedTable = table.OrderBy(t => t.Aircraft).
    ThenBy(t => t.Date).
    ThenBy(t => t.PrePost == "Post-Flight" ? 1 : 0);
var ordered = myFlights.OrderBy(f => f.Aircraft)
                       .ThenBy(f => f.prePost)
                       .ThenBy(f => f.Date);
正如你所看到的,那张桌子上没有订单(除了日期,但我只是编造了这个)

现在我想做的是当页面加载以显示此表时,该表将由
飞机
订购,并且它是基于
日期
前/后

因此,基本上我正在寻找的是:

  |Date|     |    |Aircraft|    |    |Pre / Post|

 04/08/2016  |     aircraft1    |     Pre-Flight
 04/08/2016  |     aircraft1    |     Post-Flight
 04/08/2016  |     aircraft2    |     Pre-Flight
 04/08/2016  |     aircraft2    |     Post-Flight
 04/08/2016  |     aircraft3    |     Pre-Flight
 04/08/2016  |     aircraft3    |     Post-Flight
 04/09/2016  |     aircraft1    |     Pre-Flight
 04/09/2016  |     aircraft1    |     Post-Flight
 etc         |     etc          |     etc

有没有一种方法可以使用.OrderBy方法来实现此结果?

您可以通过使用或分别执行第一个调用来将多个调用链接在一起:

// This would order by FlightDate, Aircraft then PrePost
var aircraftFlights = context.AircraftFlights.OrderBy(a => a.FlightDate)
                                             .ThenBy(a => a.Aircraft)
                                             .ThenBy(a => a.PrePost);

因为你希望你的飞行前值总是在你的飞行后值之前,你可以考虑明确地使用一个<代码> OrthByDeDeDeNoG()/<代码>该列(如字母顺序后的前):


你可以根据自己的需要来定制。基本上,一旦您调用了第一个
OrderBy()
调用,您的集合就变成了一个
OrderedEnumerable
,它公开了
ThenBy()
ThenByDescending()
调用,并将处理将它们链接在一起的问题。

您可以通过分别使用或跟随第一个调用将多个调用链接在一起:

// This would order by FlightDate, Aircraft then PrePost
var aircraftFlights = context.AircraftFlights.OrderBy(a => a.FlightDate)
                                             .ThenBy(a => a.Aircraft)
                                             .ThenBy(a => a.PrePost);

因为你希望你的飞行前值总是在你的飞行后值之前,你可以考虑明确地使用一个<代码> OrthByDeDeDeNoG()/<代码>该列(如字母顺序后的前):


你可以根据自己的需要来定制。基本上,一旦您调用了第一个
OrderBy()
调用,您的集合就变成了一个
OrderedEnumerable
,它公开了
ThenBy()
ThenBy降序()
调用,并将它们链接在一起。

您可以对要应用的每个排序约束使用OrderBy,然后再调用。假设您正在排序的可枚举项具有所有三个属性,它可能如下所示:

  |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
myEnumerable.OrderBy(x => x.Aircraft).ThenBy(z => z.PrePost).ThenBy(a => a.Date);
var orderedTable = table.OrderBy(t => t.Aircraft).
    ThenBy(t => t.Date).
    ThenBy(t => t.PrePost == "Post-Flight" ? 1 : 0);
var ordered = myFlights.OrderBy(f => f.Aircraft)
                       .ThenBy(f => f.prePost)
                       .ThenBy(f => f.Date);

对于要应用的每个排序约束,可以使用OrderBy,然后再调用ThenBy。假设您正在排序的可枚举项具有所有三个属性,它可能如下所示:

  |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
myEnumerable.OrderBy(x => x.Aircraft).ThenBy(z => z.PrePost).ThenBy(a => a.Date);
var orderedTable = table.OrderBy(t => t.Aircraft).
    ThenBy(t => t.Date).
    ThenBy(t => t.PrePost == "Post-Flight" ? 1 : 0);
var ordered = myFlights.OrderBy(f => f.Aircraft)
                       .ThenBy(f => f.prePost)
                       .ThenBy(f => f.Date);

您需要使用lambda组合
OrderBy
ThenBy
来计算
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
myEnumerable.OrderBy(x => x.Aircraft).ThenBy(z => z.PrePost).ThenBy(a => a.Date);
var orderedTable = table.OrderBy(t => t.Aircraft).
    ThenBy(t => t.Date).
    ThenBy(t => t.PrePost == "Post-Flight" ? 1 : 0);
var ordered = myFlights.OrderBy(f => f.Aircraft)
                       .ThenBy(f => f.prePost)
                       .ThenBy(f => f.Date);

您需要使用lambda组合
OrderBy
ThenBy
来计算
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
myEnumerable.OrderBy(x => x.Aircraft).ThenBy(z => z.PrePost).ThenBy(a => a.Date);
var orderedTable = table.OrderBy(t => t.Aircraft).
    ThenBy(t => t.Date).
    ThenBy(t => t.PrePost == "Post-Flight" ? 1 : 0);
var ordered = myFlights.OrderBy(f => f.Aircraft)
                       .ThenBy(f => f.prePost)
                       .ThenBy(f => f.Date);

使用System.LinQ的
ThenBy
扩展名

您的代码可能如下所示:

  |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
myEnumerable.OrderBy(x => x.Aircraft).ThenBy(z => z.PrePost).ThenBy(a => a.Date);
var orderedTable = table.OrderBy(t => t.Aircraft).
    ThenBy(t => t.Date).
    ThenBy(t => t.PrePost == "Post-Flight" ? 1 : 0);
var ordered = myFlights.OrderBy(f => f.Aircraft)
                       .ThenBy(f => f.prePost)
                       .ThenBy(f => f.Date);

请检查使用System.LinQ的
扩展名,以供参考

您的代码可能如下所示:

  |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
myEnumerable.OrderBy(x => x.Aircraft).ThenBy(z => z.PrePost).ThenBy(a => a.Date);
var orderedTable = table.OrderBy(t => t.Aircraft).
    ThenBy(t => t.Date).
    ThenBy(t => t.PrePost == "Post-Flight" ? 1 : 0);
var ordered = myFlights.OrderBy(f => f.Aircraft)
                       .ThenBy(f => f.prePost)
                       .ThenBy(f => f.Date);

作为参考,请检查

他想先按日期排序。这一点,OP需要在
PrePost
之前按日期/飞机排序。因此,这里的整个排序都是错误的。我更多的是试图展示语法,而不是担心OP想要实现的确切排序。他想先按日期排序。这样,OP就需要在
PrePost
之前按日期/飞机排序。因此,这里的整个顺序都是错误的。我更多的是试图展示语法,而不是担心OP想要实现的确切顺序。快告诉我!;)也许你想从我的most中复制MSDN引用以使其成为完整的答案?我的所有方法都应该指向各自的MSDN引用。在我看来,灰色上的蓝色总是比普通灰色好看,而且你也比我强D那么就没有什么可补充的了。谢谢@RionWilliams你在我最近的大部分问题上都帮了我很大的忙,哈哈,让我来吧!;)也许你想从我的most中复制MSDN引用以使其成为完整的答案?我的所有方法都应该指向各自的MSDN引用。在我看来,灰色上的蓝色总是比普通灰色好看,而且你也比我强D那么就没有什么可补充的了。谢谢@RionWilliams你对我最近的大部分问题都帮了我很大的忙。哈纳特只是这基本上是对DavidY之前的回答的直接抄袭,就像David的回答一样,这里的顺序是完全错误的。我只是在发送我的后才看到他的帖子,公平地说,除了顺序之外,所有的答案都是相同的,我承认我误解了这一点。这不仅基本上是对DavidY之前的答案的直接抄袭,就像David的答案一样,这里的顺序是完全错误的。我只是在发送我的邮件后才看到他的帖子,公平地说,所有的答案都是相同的,除了顺序,我承认我误解了那个。