You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LINQ统计List<TimeSheetEntry>中的唯一工作天数?

用LINQ统计考勤记录中的唯一工作天数

没问题,这事儿用LINQ处理起来非常简洁!核心思路就是提取每条记录的日期部分、去重,最后计数就行,我给你一步步拆解:

首先,假设你的TimeSheetEntry类结构大概是这样(和你提到的一致,包含ClockInTimeStamp属性):

public class TimeSheetEntry
{
    public DateTime ClockInTimeStamp { get; set; }
    // 其他属性比如 UserId、ClockOutTimeStamp 之类的,不影响我们的统计逻辑
}

基础版:统计所有记录中的唯一工作天数

如果只是想统计整个列表里的唯一工作天数,直接用这几行LINQ就搞定:

// 先拿到你的考勤记录列表
List<TimeSheetEntry> allTimeSheets = GetYourTimeSheetData(); // 替换成你获取数据的方式

int totalUniqueWorkDays = allTimeSheets
    // 提取每条记录的日期部分(忽略时分秒,只保留年/月/日)
    .Select(entry => entry.ClockInTimeStamp.Date)
    // 去重,得到所有不重复的日期
    .Distinct()
    // 统计去重后的日期数量,就是工作天数
    .Count();

进阶版:按用户分组统计工作天数

如果你的列表里包含多个用户的记录,想要分别统计每个用户的工作天数,只需要加个分组操作:

var userWorkDayStats = allTimeSheets
    // 按用户ID分组(假设你的类里有UserId属性)
    .GroupBy(entry => entry.UserId)
    // 对每个分组统计唯一日期数量
    .Select(group => new 
    {
        UserId = group.Key,
        WorkDayCount = group
            .Select(e => e.ClockInTimeStamp.Date)
            .Distinct()
            .Count()
    });

// 遍历输出结果
foreach (var stats in userWorkDayStats)
{
    Console.WriteLine($"用户 {stats.UserId} 的工作天数:{stats.WorkDayCount}");
}

额外优化:排除周末/节假日

如果需要排除周末(周六周日),可以在去重后加个过滤条件:

int workDaysExcludingWeekends = allTimeSheets
    .Select(entry => entry.ClockInTimeStamp.Date)
    .Distinct()
    // 过滤掉周六和周日
    .Where(date => date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday)
    .Count();

要是需要排除节假日,你得有一个节假日的日期列表,然后用Contains来过滤就行,比如:

List<DateTime> holidayDates = GetHolidayDates(); // 你的节假日列表

int workDaysExcludingHolidays = allTimeSheets
    .Select(entry => entry.ClockInTimeStamp.Date)
    .Distinct()
    .Where(date => !holidayDates.Contains(date) && 
                   date.DayOfWeek != DayOfWeek.Saturday && 
                   date.DayOfWeek != DayOfWeek.Sunday)
    .Count();

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:18:46