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

LINQ左连接场景下判断关联表是否存在可跳过周末的缺失行实现方案

解决方案

首先修正原查询框架的笔误:左连接后关联的Table2数据已命名为leftjoinvar,原group语句中的t2需要替换为leftjoinvar,否则会触发编译错误。

完整实现代码

from t1 in table1
join t2 in table2 on t1.ID equals t2.ID into temp
from leftjoinvar in temp.DefaultIfEmpty()
group new {t1, leftjoinvar} by new {t1.FoodID} into g
select new myVM {
    theFoodName = g.Key.FoodID,
    isRowMissingForTheFoodName = (() => {
        // 取当前品类对应的统计起始日期
        DateTime startDt = DateTime.Parse(g.First().t1.StartDate);
        // 提取当前品类所有有效统计日期,排除Till Today特殊行
        var existDates = g.Select(x => x.leftjoinvar?.Date)
                          .Where(d => d != null && d != "Till Today")
                          .Select(d => DateTime.Parse(d))
                          .Distinct()
                          .ToList();
        // 无任何有效统计行直接判定为缺失
        if (!existDates.Any()) return false;
        // 取最大有效日期作为统计区间的结束节点
        DateTime endDt = existDates.Max();
        // 计算统计区间内的工作日总数(自动排除周六周日)
        int workDayCount = Enumerable.Range(0, (endDt - startDt).Days + 1)
                                     .Select(offset => startDt.AddDays(offset))
                                     .Count(d => d.DayOfWeek is not DayOfWeek.Saturday and not DayOfWeek.Sunday);
        // 实际统计行数和所需工作日数相等则无缺失,返回true
        return existDates.Count == workDayCount;
    })()
}

注意事项

  • 该逻辑默认适配所有周末的跳过规则,不需要对特定日期做硬编码
  • 自动根据每个品类的起始日期计算统计范围,无需提前预设全局区间
  • 对Table2的重复日期做了去重处理,避免脏数据导致判断错误
  • 如果你是用EF Core做数据库查询,建议先将关联数据加载到内存后再执行分组判断,避免EF无法解析表达式抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:48:00