RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 821745
Accepted
A K
A K
Asked:2020-05-01 18:54:24 +0000 UTC2020-05-01 18:54:24 +0000 UTC 2020-05-01 18:54:24 +0000 UTC

按 DayOfWeek 排序,一周从星期一开始

  • 772

有一个带有时间表(星期几+哪里)的盘子,它基于enum DayOfWeek:

public class Schedule
{
    public int Id { get; set; }

    public DayOfWeek DayOfWeek { get; set; }

    public int? PlaceId { get; set; }

    public Place Place { get; set; }

    [Required]
    [MaxLength(50)]
    public string Notes { get; set; }
}

对于人们,我必须按星期几的升序排序,例如:

return await this.ApplicationDbContext.Schedule
                 .Where(x => x.PlaceId != null)
                 .OrderBy(x => x.DayOfWeek)
                 .AsNoTracking()
                 .ToListAsync();

一切都会好起来的,但该网站是为那些每周从星期一(俄罗斯)开始的国家制作的,而不是在星期天。

DayOfWeek它从周日开始:

public enum DayOfWeek
{
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
}

有没有一些简单的方法来指定“一周的第一天是星期一”的排序?

c#
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Андрей NOP
    2020-05-05T20:57:35Z2020-05-05T20:57:35Z

    试试“魔法”(实际上这只是一周内几天的循环移位):

    .OrderBy(x => ((int)x.DayOfWeek + 6) % 7)
    

    在表达式树中,这个 lambda 被正常分解,我认为 EF 可以将这棵树翻译成 SQL 查询(我自己没有检查)。

    该方法很好,因为只需更改常量6,您还可以更改所需的一周开始时间。

    如何隐藏公式并使查询更具可读性可以在此主题中找到:如何为 lambda 制作表达式树?


    添加。事实上,这样的请求是很正常地广播的。

    最初的要求是:

    SELECT
        [t0].[Id],
        [t0].[DayOfWeek],
        [t0].[Notes],
        [t0].[PlaceId]
    FROM [Schedule] AS [t0]
    WHERE [t0].[PlaceId] IS NOT NULL
    ORDER BY [t0].[DayOfWeek]
    

    随着星期几的变化,结果是这样的:

    -- Region Parameters
    DECLARE @p0 Int = 6
    DECLARE @p1 Int = 7
    -- EndRegion
    SELECT
        [t0].[Id],
        [t0].[DayOfWeek],
        [t0].[Notes],
        [t0].[PlaceId]
    FROM [Schedule] AS [t0]
    WHERE [t0].[PlaceId] IS NOT NULL
    ORDER BY ([t0].[DayOfWeek] + @p0) % @p1
    
    • 10
  2. Vlad
    2020-05-07T16:57:34Z2020-05-07T16:57:34Z

    为什么不创建自己的枚举并使用它呢?例如,

    public enum DayOfWeekRussian
    {
        Monday,
        Tuesday,
        Wednesday,
        Thursday,
        Friday,
        Saturday,
        Sunday
    }
    
    • 3

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5