【问题标题】:Orderby ASC/DESC when certain state特定状态时按 ASC/DESC 排序
【发布时间】:2016-09-09 07:35:38
【问题描述】:

我想过滤表格中的某些元素,但是当表格中有某种状态时,我想在降序时过滤相同的状态。

例子

当状态为“打开”时,我想过滤“tijdSluit”升序。当状态为“Gesloten”时,我想过滤“tijdSluit”降序。

我现在使用的代码

return View(db.GetAllRequests().OrderBy(Request => Request.request.Status).ThenBy(Request => Request.request.tijdSluit));

问题是您无法在同一个表中按升序和降序进行过滤。我该如何解决这个问题?

我试过了

return View(db.GetAllRequests().Where(Request => Request.request.Status == 1).OrderBy(Request => Request.request.Status).Where(Request => Request.request.Status != 1).OrderByDescending(Request => Request.request.tijdSluit));

但是当我运行该代码时,我得到一个空表。

我怎样才能正确地做到这一点?

【问题讨论】:

  • 如果返回的数据是空的,那么检查为什么是空的,排序不会影响编号。您将获得的结果
  • @BonMacalindong 是因为有一个Where
  • 您无法通过两种方式对数据进行排序。它要么是下降的,要么是上升的。你想要做的是在你的“状态”上写一个 if 并根据它进行排序。
  • @Thomas 我知道这是不可能的,这就是我问的原因。 :)

标签: asp.net asp.net-mvc razor


【解决方案1】:

当然,不可能同时为您订购表 asc 和 desc。也许在您的情况下,您需要两个有序序列?像这样吗?

var allRequests = db.GetAllRequests();
var openRequests = allRequests.Where(Request => Request.request.Status == 1).OrderBy(Request => Request.request.Status).ToList();
var otherRequests = allRequests.Where(Request => Request.request.Status != 1).OrderByDescending(Request => Request.request.tijdSluit)).ToList();
openRequests.AddRange(otherRequests);
return View(openRequests);

【讨论】:

  • 错误:“无法从 'void' 转换为 'object'。”
猜你喜欢
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 2015-03-05
  • 2015-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多