Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
使用linq在C#中进行排序_C#_Asp.net Mvc_Linq_Sorting - Fatal编程技术网

使用linq在C#中进行排序

使用linq在C#中进行排序,c#,asp.net-mvc,linq,sorting,C#,Asp.net Mvc,Linq,Sorting,单击按钮时,我需要检查列表不按升序排列,页面加载时按升序排列。但是我需要检查列表是否已经按升序排列,我需要按降序排列,如果列表已经按降序排列,我需要按升序排列。我怎样才能做到这一点,我已经附上我的代码如下。有谁能帮我一下吗 public ActionResult OrderbyName(ResultWrapper wrapper) { wrapper.HotelDetails = wrapper.HotelDetails.OrderBy(m =>m.Name).ToList

单击按钮时,我需要检查列表不按升序排列,页面加载时按升序排列。但是我需要检查列表是否已经按升序排列,我需要按降序排列,如果列表已经按降序排列,我需要按升序排列。我怎样才能做到这一点,我已经附上我的代码如下。有谁能帮我一下吗

 public ActionResult OrderbyName(ResultWrapper wrapper)
 {
      wrapper.HotelDetails = wrapper.HotelDetails.OrderBy(m =>m.Name).ToList();
      //wrapper.HotelDetails = wrapper.HotelDetails.OrderByDescending(m => m.Name).ToList();
      //}
      //else
      //{
      //    wrapper.HotelDetails = wrapper.HotelDetails.OrderByDescending(m => m.Name).ToList();
      //}
      return Json(wrapper);
 }
你可以这么做

wrapper.HotelDetails.Reverse()

return Json(wrapper.HotelDetails) 
这将颠倒项目的当前顺序

if (wrapper.HotelDetails.SequenceEqual(wrapper.HotelDetails.OrderBy(m => m.Name)))
{
    wrapper.HotelDetails = wrapper.HotelDetails.OrderByDescending(m => m.Name);
}
else if (wrapper.HotelDetails.SequenceEqual(wrapper.HotelDetails.OrderByDescending(m => m.Name)))
{
    wrapper.HotelDetails = wrapper.HotelDetails.OrderBy(m => m.Name);
}
else
{
    // List isn't ordered, you haven't specified what must be done in this case
}
首先,检查序列是否匹配其自身的升序版本,如果匹配,则将其降序。如果它与自身的降序版本相匹配,则将其升序。如果没有订购,您也可以这样做,但是您还没有指定(除非我误解了这个问题)


注意:可以将其重构为更“优雅”,但我将其保留为一个简单、可读的
if
语句,这样您就可以了解它在做什么。

这个问题的答案在很大程度上取决于其他信息。如果您是在a中执行此操作,答案可能是“将
AllowSorting
设置为
true

请将问题分成几个简短清晰的句子。它没有通过我的解析器,所以我不知道你在问什么。哪种类型是
HotelWrapper.HotelDetails
-IEnumerable?请注意SequenceEqual枚举整个序列;根据序列的长度,这可能相当慢。@ShellShock-这是真的。这是否是一个问题取决于OPs数据集。如果这是一个问题,本文将讨论一个可行的替代方案: