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

.NET Core中如何用LINQ统计指定日期下NotAvailable状态的元素数量

解决嵌套模型下指定日期的状态统计问题

嘿,这个统计需求用.NET Core里的LINQ就能轻松搞定,我给你一步步拆解实现方式:

首先,先明确我们的目标:遍历所有States实例,从它们嵌套的States(也就是DateData列表)里,筛选出指定日期且StateType为NotAvailable的条目,最后统计总数量。

核心实现代码

假设你已经有了一个List<States>类型的数据集(比如叫statesCollection),指定日期是2020年9月10日,那么可以这样写:

// 定义目标日期(注意如果你的DateTime包含时间部分,建议只取年月日进行比较)
var targetDate = new DateTime(2020, 9, 10).Date;

// 统计NotAvailable的总数量
int notAvailableTotal = statesCollection
    // 把所有嵌套的DateData列表扁平化成一个统一的集合
    .SelectMany(stateItem => stateItem.States)
    // 过滤出符合条件的条目:日期匹配 + 状态为NotAvailable
    .Count(data => data.Date.Date == targetDate && data.type == StateType.NotAvailable);

关键细节说明

  • SelectMany的作用:它能把嵌套的集合(每个States里的States列表)“展开”成一个单一的IEnumerable<DateData>集合,这样我们就能统一处理所有的日期数据,不用写嵌套循环。
  • 日期比较的坑:如果你的DateData.Date包含具体时间(比如时分秒),直接用==比较可能会因为时间不匹配漏统计,所以用.Date属性只比较年月日部分。
  • 空值安全处理:如果你的数据集可能存在null(比如statesCollection为null,或者某个States的States属性为null),可以加上空值检查避免报错:
int notAvailableTotal = statesCollection?
    .SelectMany(stateItem => stateItem.States ?? Enumerable.Empty<DateData>())
    .Count(data => data.Date.Date == targetDate && data.type == StateType.NotAvailable) 
    ?? 0;

小建议:优化命名可读性

你的模型里类名States和属性名States完全一样,这很容易在写代码时造成混淆,建议把属性重命名成更清晰的名字,比如DateStates,这样代码会更易维护:

public class States { 
    public string Name { get; set; } 
    public List<DateData> DateStates { get; set; } // 重命名属性
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:33:03