【问题标题】:LINQ: OrderByDescending by last value of multiple dates within the tableLINQ:OrderByDescending 按表中多个日期的最后一个值
【发布时间】:2018-03-16 01:51:07
【问题描述】:

我正在尝试对我的 LINQ 查询执行 OrderByDescending。目前我正在对 ProcedureDate 字段执行 OrderByDescending。

业务场景: 用户最多可以进入应用程序并在应用程序中添加 ChangeProcedureDates 3 次。所以在数据库中还有额外的字段叫做 ChangeProcedureDate1、ChangeProcedureDate2 和 ChangeProcedureDate3。

我想要完成的工作: 我想修改我的 LINQ 查询,以便它可以检查是否在 ChangeProcedureDate1、ChangeProcedureDate2 和 ChangeProcedureDate3 为 NULL 的情况下,然后 OrderBy ProedureDate 因为没有更改。如果ProcedureDate、ChangeProcedureDate1 已填写并且ChangeProcedureDate2 和ChangeProcedureDate3 为NULL,那么我们需要OrderBy ChangeProcedureDate1。 ChangeProcedureDate2 和 ChangeProcedureDate3 也是如此。基本上我需要在多个 DateTimeFields 中找到最新的日期条目并对其进行排序。

下面是我的 LINQ 查询。

 var unsortedItems = context.ReservationRequests
                   .Where(s => ((s.ReservationRequestStatusId.HasValue) &&
                   (s.ReservationRequestStatusId.Value == ReservationRequestStatusId)) &&
                   (Roles.Any(y => s.SubmitterGroupName == y) ||
                   s.CreatedBy == currentUserGuid))
                 .OrderByDescending(x => x.ProcedureDate  ?? DateTime.MinValue);

我很难理解如何在 LINQ 中做到这一点?

【问题讨论】:

标签: c# linq


【解决方案1】:

试试这个:

.OrderByDescending(x => x.ChangeProcedureDate3 ?? x.ChangeProcedureDate2 ?? x.ChangeProcedureDate1 ?? x.ProcedureDate);

或者,根据需要更改属性的顺序。

【讨论】:

  • 这不是说(检查是否 ProcedureDate 不为空。如果是,请移至 ChangeProcedureDate1 。如果 ChangeProcedureDate1 为空,则移至 ChangeProcedureDate2。如果 ChangeProcedureDate2 为空,则移至 ChangeProcedureDate3 )?跨度>
  • 如果是这种情况,那么这将失败,因为用户可以输入 ChangeProcedureDate2 。这并不意味着我们将 ChangeProcedureDate1 和 ProcedureDate 归零
  • @HereToLearn_ 然后从 ChangeProcedureDate3 重新排序到 ChangeProcedureDate1。您将获得最新日期
  • @HereToLearn_ 进展如何?
  • 这对我来说很好。非常感谢你的想法..我不敢相信我自己看不到它
猜你喜欢
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 2012-05-29
  • 2022-11-19
  • 2021-05-31
  • 1970-01-01
相关资源
最近更新 更多