首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用linq按周和工作日对日期进行分组?

LINQ(Language Integrated Query)是一种在.NET平台上进行数据查询和操作的技术。它提供了一种统一的查询语法,可以对各种数据源进行查询,包括集合、数据库、XML等。

要按周和工作日对日期进行分组,可以使用LINQ的GroupBy方法结合自定义的分组键来实现。首先,需要定义一个函数来确定日期所属的周和工作日。以下是一个示例代码:

代码语言:txt
复制
public class DateGroup
{
    public int Week { get; set; }
    public string DayOfWeek { get; set; }
    public DateTime Date { get; set; }
}

public static void Main()
{
    // 假设有一个日期列表
    List<DateTime> dates = new List<DateTime>
    {
        new DateTime(2022, 1, 1),
        new DateTime(2022, 1, 2),
        new DateTime(2022, 1, 3),
        new DateTime(2022, 1, 4),
        new DateTime(2022, 1, 5),
        new DateTime(2022, 1, 6),
        new DateTime(2022, 1, 7),
        new DateTime(2022, 1, 8),
        new DateTime(2022, 1, 9),
        new DateTime(2022, 1, 10),
        new DateTime(2022, 1, 11),
        new DateTime(2022, 1, 12),
        new DateTime(2022, 1, 13),
        new DateTime(2022, 1, 14),
        new DateTime(2022, 1, 15)
    };

    var groupedDates = dates.Select(date => new DateGroup
    {
        Week = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstDay, DayOfWeek.Monday),
        DayOfWeek = date.DayOfWeek.ToString(),
        Date = date
    })
    .GroupBy(d => new { d.Week, d.DayOfWeek })
    .OrderBy(g => g.Key.Week)
    .ThenBy(g => GetDayOfWeekOrder(g.Key.DayOfWeek));

    foreach (var group in groupedDates)
    {
        Console.WriteLine($"Week {group.Key.Week}, {group.Key.DayOfWeek}:");
        foreach (var date in group)
        {
            Console.WriteLine(date.Date.ToShortDateString());
        }
        Console.WriteLine();
    }
}

private static int GetDayOfWeekOrder(string dayOfWeek)
{
    switch (dayOfWeek)
    {
        case "Monday":
            return 1;
        case "Tuesday":
            return 2;
        case "Wednesday":
            return 3;
        case "Thursday":
            return 4;
        case "Friday":
            return 5;
        case "Saturday":
            return 6;
        case "Sunday":
            return 7;
        default:
            return 0;
    }
}

上述代码中,我们首先定义了一个DateGroup类,用于存储分组后的日期信息。然后,我们创建了一个日期列表dates,包含了一些日期数据。

接下来,我们使用LINQ的Select方法将日期列表转换为DateGroup对象,并在转换过程中计算出每个日期所属的周和工作日。然后,我们使用GroupBy方法按照周和工作日进行分组,并使用OrderBy方法对分组结果进行排序。

最后,我们通过遍历分组结果,将每个分组的周数、工作日和日期打印出来。

这样,我们就可以按周和工作日对日期进行分组了。

腾讯云相关产品和产品介绍链接地址:

请注意,以上仅为腾讯云的一些相关产品,其他云计算品牌商也提供类似的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Quartz定时任务时间格式配置说明

    * :表示所有值. 例如:在分的字段上设置 "*",表示每一分钟都会触发。 ? :表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为"?" 具体设置为 0 0 0 10 * ? - :表示区间。例如 在小时上设置 "10-12",表示 10,11,12点都会触发。 , :表示指定多个值,例如在周字段上设置 "MON,WED,FRI" 表示周一,周三和周五触发 / :用于递增触发。如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,50)。 在月字段上设置'1/3'所示每月1号开始,每隔三天触发一次。 L :表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于"7"或"SAT"。如果在"L"前加上数字,则表示该数据的最后一个。

    04
    领券